c# - 如何在 MassTransit 中配置多个消息消费者?

标签 c# publish-subscribe servicebus masstransit

我正在考虑使用 MassTransit将事件从一个进程发布到所有其他关心该事件的进程。在我的环境中,订阅该事件的多个进程可能在同一个盒子上运行。

基于 MassTransit 的示例代码,这里有一个非常简单的概念验证,它不会尝试处理多播(进程也将分布在许多机器上)。将下面的“消息”视为“事件”,并且我希望此过程的每个实例都获得该消息:

using System;
using MassTransit;

namespace BasicPubSub
{
    public class Message
    {
        public String Text { get; set; }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            //initialize the bus
            var bus = ServiceBusFactory.New(sbc =>
            {
                sbc.UseMsmq();

                //cause the DTC and MSMQ to get installed/fixed if needed.
                sbc.VerifyMsDtcConfiguration();
                sbc.VerifyMsmqConfiguration();

                //sbc.UseMulticastSubscriptionClient();//Doesn't behave for a private queue.
                sbc.ReceiveFrom("msmq://localhost/test_queue");

                //Listen for interesting events.
                sbc.Subscribe(subs =>
                {
                    subs.Handler<Message>(msg => Console.WriteLine(msg.Text));
                });
            });

            //stay open until the user types "exit"
            var message = "";
            do
            {
                message = Console.ReadLine();
                //broadcast the message
                bus.Publish(new Message { Text = message });
            } while (message != "exit");
        }
    }
}

如果我运行此 C# 应用程序的多个实例,只有一个实例会收到消息,但我需要所有实例都收到它。这种行为与队列的经典概念一致,所以我对此没有意见。

我想知道的是,我是否可以使用 MSMQ/MassTransit 发布所有订阅者都会收到的消息,而不是只有一个订阅者将其出列而其他订阅者没有收到。也许我正在尝试使用锤子,但我需要一把画笔?

这里要明确一点,我不是要为不同类型的消息共享一个队列,我是要为特定类型的消息设置“点对点”发布-订阅,使用 MT 和MSMQ.

最佳答案

我不确定使用锤子还是画笔,但我认为您的方向是正确的。

首先,总线的每个实例都需要有自己的队列来读取。如果您正在运行同一程序的多个版本,请确保它们正在读取不同的队列。尝试从同一个队列读取会导致 Bad Stuff(TM)。

如果您有更多问题,请加入邮件列表。 https://groups.google.com/forum/#!forum/masstransit-discuss .

发布时,all consumers should recieve the message一旦他们被订阅。启动时,订阅数据可能需要一两秒钟才能传递到所有进程。

我还建议看一下 RabbitMQ。除非您绝对需要 DTC,否则 RabbitMQ 是一个更强大的消息传递平台。

关于c# - 如何在 MassTransit 中配置多个消息消费者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11885135/

相关文章:

c# - 将 Rgb 图像转换为灰度 C# 代码时出现性能问题

c# - 创建计时器并启动它并随时获取它的值 c#

c# - 如何处理 JsonConvert.DeserializeObject<T>() 返回的 Json 错误代码

c# - 将成员设置为虚拟可防止调用默认接口(interface)实现并导致 C# 8 中的 StackOverflowException

apache - 实时应用新手 - Node.JS + Redis 或 RabbitMQ -> 客户端/服务器如何?

C: 我能知道使用 C SDK 的 pubnub 订阅中的还原选项吗

tcp - AMQP是如何克服直接使用TCP的困难的呢?

.net - Azure 服务总线中继中的 304 响应

azure - 使用不同接收器实例查看并完成消息 - Azure 服务总线

powershell - 获取变量 Powershell 中资源组的位置值