在NServiceBus中,您可以创建一个SendOnly总线,这意味着它所做的就是将消息发送到另一个服务。在我看来,这根本不需要发送服务的本地队列,但是我无法配置它。
var bus = Configure.With()
.DefiningCommandsAs(t => typeof(MyNamespace.Messaging.Markers.ICommand).IsAssignableFrom(t))
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.UnicastBus()
.SendOnly();
给出以下例外:
无法生成任何端点名称,请指定您自己的名称 使用Configure.DefineEndpointName(...)
的约定
虽然我可以通过添加.DefineEndpointName
来解决此问题,但为此服务创建队列似乎很糟糕,因为它实际上永远不会被使用。
有没有办法避免为只发送总线创建本地队列,如果没有,为什么在这种模式下需要这个本地队列?
答案 0 :(得分:2)
所有端点都需要一个名称,无论它们是否仅发送。这与队列的创建无关(是队列名称==端点名称)。添加定义端点名称,您将看到不会创建任何队列。另请注意,发送的消息不会包含对地址的回复,因为这没有意义。
答案 1 :(得分:1)
我相信这是消息来自的地方。发送队列是MSMQ的固有部分。它允许ack消息,支持NServiceBus总线。回复功能。
在这种情况下,似乎没有必要,但如果我们认为SendOnly试图引导开发人员使用特定的消息传递方式。考虑到支持多种消息传递方式的MSMQ,我认为这不是一个问题。