1

在 NServiceBus 中,您可以创建一个 SendOnly 总线,这意味着它所要做的就是将消息发送到另一个服务。在我看来,这根本不需要发送服务的本地队列,但是我无法配置它。

var bus = Configure.With()
    .DefiningCommandsAs(t => typeof(MyNamespace.Messaging.Markers.ICommand).IsAssignableFrom(t))
    .DefaultBuilder()
    .XmlSerializer()
    .MsmqTransport()
    .UnicastBus()
    .SendOnly();

给出以下例外:

无法生成端点名称,请使用 Configure.DefineEndpointName(...) 指定您自己的约定

虽然我可以通过添加一个.DefineEndpointName似乎很糟糕的形式来为这个服务创建一个队列来解决这个问题,因为它实际上永远不会被使用。

有没有办法避免需要为只发送总线创建本地队列,如果没有,为什么在这种模式下需要这个本地队列?

4

2 回答 2

2

所有端点都需要一个名称,无论它们是否仅发送。这与队列的创建无关(是的队列名称==端点名称)。添加定义端点名称,您将看到不会创建任何队列。另请注意,发送的消息将不包含对地址的回复,因为这没有意义。

于 2013-03-03T06:36:42.823 回答
1

我相信这是提供消息的来源。发送队列是 MSMQ 的固有部分。它允许确认消息,支持 NServiceBus bus.Reply 功能。

在这种情况下似乎没有必要,但如果我们认为 SendOnly 试图引导开发人员使用特定的消息传递样式。考虑到支持多种消息传递方式的 MSMQ,我认为这不是一个问题。

于 2013-02-27T20:59:29.337 回答