调用wcf方法时通知rabbitmq队列用户[关闭]

问题描述 投票:-2回答:1

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

我在RabbitMq世界中是一个新手,所以问题是,最好的方法是什么,以便这应该在同一个服务中运行。

这有什么框架吗? RabbitMq适合这个还是建议使用另一个Message Broker?

c# wcf rabbitmq messagebroker
1个回答
1
投票

RabbitMQ有一个名为EasyNetQ的迷人.net包装器,它适用于服务之间的通知和其他通信,请参阅Jeffrey Richter视频 - 123。通过消息队列进行的通信允许保持服务独立并且彼此不知情。所以去吧,看看带有EasyNetQ的quickstart并发布\ 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();
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.