我正在寻找使用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为特定类型的消息设置“peer-to-peer”pub-sub。和MSMQ。
对此的任何解决方案。我正在开发一款应用程序,要求msg发送给所有人,每个人都可以发布消息。 – 2014-09-29 09:58:16
@tonginbox - 我们结束了使用RabbitMQ和“扇出”策略,每个消费者都有自己的队列,发布到交换机的消息被复制到所有消息中。 – 2014-09-30 12:16:01