Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用wcf方法时通知rabbitmq队列订户_C#_Wcf_Rabbitmq_Messagebroker - Fatal编程技术网

C# 调用wcf方法时通知rabbitmq队列订户

C# 调用wcf方法时通知rabbitmq队列订户,c#,wcf,rabbitmq,messagebroker,C#,Wcf,Rabbitmq,Messagebroker,我们有一个承载WCF接口的Windows服务(ServiceHost)。这项服务提供了一种方法,例如AddProduct。现在,如果没有错误或其他不可预见的事情发生,则应通过RabbitMq(Pub/Sub)传递一条消息,说明已添加新产品。然后,其他服务应使用此消息并自行处理它 我在RabbitMq领域是个新手,所以问题是,考虑到这应该在同一个服务中运行,最好的方法是什么 这方面有什么框架吗?RabbitMq是否适用于此,还是建议使用另一个Message Broker?RabbitMq有一个名为

我们有一个承载WCF接口的Windows服务(ServiceHost)。这项服务提供了一种方法,例如AddProduct。现在,如果没有错误或其他不可预见的事情发生,则应通过RabbitMq(Pub/Sub)传递一条消息,说明已添加新产品。然后,其他服务应使用此消息并自行处理它

我在RabbitMq领域是个新手,所以问题是,考虑到这应该在同一个服务中运行,最好的方法是什么


这方面有什么框架吗?RabbitMq是否适用于此,还是建议使用另一个Message Broker?

RabbitMq有一个名为的迷人的.net包装器,适用于服务之间的通知和其他通信,请参阅Jeffrey Richter视频-。通过消息队列进行的通信允许保持服务的独立性和互不知情性。因此,开始吧,看看使用EasyNetQ和publish\subscribe模式。它应该适合你上面的任务。下面是一个示例,说明如何通过简单的类型化发布订阅者方法通知服务部门有关新项目的信息:

// somewhere in your WCF service
if (isProductAddedSuccessfully)
{
    using (var bus = RabbitHutch.CreateBus("host=your-rabbitmq-node"))
    {
        bus.Publish(new NewProductMessage
        {
            Id = product.Id,
            Amount = 1,
            Added = DateTime.Now
        });
    }
}
以及您的一些服务:

public class Service : IDisposable
{
    private IBus _bus;

    public void Initialize()
    {
        _bus = RabbitHutch.CreateBus("host=your-rabbitmq-node");
        _bus.Subscribe<NewProductMessage>("test", HandleNewProduct);
    }

    void HandleNewProduct(NewProductMessage newProduct)
    {
        SendUserNotifiaction(newProduct);
        ProcessProductOrder(newProduct);
    }

    // Some service logic here...
    // SendUserNotifiaction
    // ProcessProductOrder

    public void Dispose()
    {
        _bus?.Dispose();
    }
}
公共类服务:IDisposable
{
专用IBus_总线;
公共无效初始化()
{
_bus=RabbitHutch.CreateBus(“主机=您的rabbitmq节点”);
_总线订阅(“测试”,HandleNewProduct);
}
void HandleNewProduct(NewProductMessage newProduct)
{
SendUserNotifiaction(新产品);
ProcessProductOrder(新产品);
}
//这里有一些服务逻辑。。。
//SendUserNotifiaction
//ProcessProductOrder
公共空间处置()
{
_总线?.Dispose();
}
}

您可以看到,所有订阅了类型为
NewProductMessage
的消息的服务在WCF服务中发布后都会收到相同的消息。相应的命名队列将自动出现在RabbitMq中。请注意,RabbitMQ上的EasyNetQ支持还提供发送\接收和请求\响应通信模式,这在服务体系结构中可能非常有用。

所以您想使用RabbitMQ发送消息……有什么问题吗?对于So来说,询问工具或LIB是一个很遗憾的话题