如何在 MassTransit 中配置多个消息使用者?

问题描述 投票:0回答:1

我正在考虑使用 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 为特定类型的消息设置“点对点”发布-订阅。

c# publish-subscribe servicebus masstransit
1个回答
1
投票

我不确定锤子或画笔,但我认为你正朝着正确的方向前进。

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

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

发布时,所有消费者在订阅后都应该收到消息。启动时订阅数据可能需要一两秒才能传递到所有进程。

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

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