gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:54:56 28 4
gpt4 key购买 nike

我正在考虑使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com