没有本地队列的SendOnly模式

时间:2013-02-27 20:28:28

标签: nservicebus

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

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

给出以下例外:

  

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

的约定

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我相信这是消息来自的地方。发送队列是MSMQ的固有部分。它允许ack消息,支持NServiceBus总线。回复功能。

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