gpt4 book ai didi

c# - NServiceBus 中的 SendOnly

转载 作者:太空狗 更新时间:2023-10-29 23:16:56 25 4
gpt4 key购买 nike

创建 NServiceBus SendOnly 端点时,目的是即发即弃,即只发送一条消息,然后其他人会处理它。这似乎是我需要的东西。我不想在总线和处理消息的系统之间进行任何通信。系统“A”想要通知系统“B”一些事情。

好吧,创建 SendOnly 端点如果非常简单,但是系统监听来自 SendOnly 端点的消息呢?

我正在尝试在将处理消息的命令行项目中设置一个监听器。消息被发送到队列,但它们没有被系统“B”处理。

这是错误的做法吗?对于此类功能,总线是否矫枉过正?

系统A:

public class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();

var bus = Configure.With()
.UnityBuilder(container)
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.UnicastBus()
.SendOnly();

while(true)
{
Console.WriteLine("Send a message");
var message = new Message(Console.ReadLine());
bus.Send(message);
}
}
}

系统 B:

class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();

var bus = Configure.With()
.UnityBuilder(container)
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();

Console.WriteLine("Waiting for messages...");

while(true)
{

}
}
}

public class MessageHandler : IHandleMessages<Message>
{
public void Handle(Message message)
{
Console.WriteLine(message.Data);
}
}

public class Message : IMessage
{
public Message()
{

}

public Message(string data)
{
Data = data;
}

public string Data { get; set; }
}

最佳答案

在 MessageEndpointMappings 中,您需要按如下方式更新它:

  1. 将 DLL 替换为包含您的消息的程序集的名称(例如“消息”)
  2. 将端点更改为系统 B 正在读取的队列的名称(您可以通过查看私有(private)队列下的 MSMQ 管理单元来检查队列名称)。
<add Messages="Messages" Endpoint="SystemB" />

NServiceBus 3 根据托管程序集的命名空间自动创建队列名称。

此外,您可能想看看使用 NServiceBus.Host托管您的处理程序而不是您自己的控制台应用程序。

关于c# - NServiceBus 中的 SendOnly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10189047/

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