Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nservicebus 不带本地队列的SendOnly模式_Nservicebus - Fatal编程技术网

Nservicebus 不带本地队列的SendOnly模式

Nservicebus 不带本地队列的SendOnly模式,nservicebus,Nservicebus,在NServiceBus中,您可以创建SendOnly总线,这意味着它将只向另一个服务发送消息。在我看来,这根本不需要发送服务的本地队列,但是我无法对此进行配置 var bus = Configure.With() .DefiningCommandsAs(t => typeof(MyNamespace.Messaging.Markers.ICommand).IsAssignableFrom(t)) .DefaultBuilder() .XmlSerializer()

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

var bus = Configure.With()
    .DefiningCommandsAs(t => typeof(MyNamespace.Messaging.Markers.ICommand).IsAssignableFrom(t))
    .DefaultBuilder()
    .XmlSerializer()
    .MsmqTransport()
    .UnicastBus()
    .SendOnly();
给出以下例外情况:

无法生成终结点名称,请指定您自己的终结点名称 使用Configure.definedpointname(…)的约定

虽然我可以通过添加一个
.definedpointname
来解决这个问题,但为这个服务创建一个队列似乎不太合适,因为它永远不会被实际使用


是否有一种方法可以避免为仅发送总线创建本地队列,如果没有,为什么在这种模式下需要此本地队列?

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


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

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

我很确定有一个DoNotCreateQueues()或类似的地址可用,如果添加该地址会发生什么?@AdamFyles我不知道地址在那里,看起来很有希望,但不幸的是,在将其添加到配置中后,我仍然会遇到相同的错误。如果没有
,该错误应该可以正常工作。DefineEndpointName(…)
(针对v3.3.5进行了测试),请参阅。你在运行哪个版本的NServiceBus?@JohnSimons这真的很有趣,我现在正在运行3.3.0。我将尝试在控制台应用程序,看看我是否可以让它去太多。。。以上是在一个MVC站点上(并不是说这会有什么不同)@JohnSimons我知道问题是什么,但我仍然不确定为什么,我有一个自定义的命令界面(我并没有把它放在问题中,因为我认为它不相关,但它似乎是)。你知道这会有什么不同吗?这是有道理的,它看起来还是有点难看,但我明白了为什么:)有趣的是它没有创建队列,为什么它不需要。如果我不使用。DefineEndpointName。DefiningCommandsAs?我还注意到,当使用no.DefineEndpointName发送时,它确实引用了一个不存在的发送方队列。我的猜测是,通过跳过约定,找不到任何消息,这不会触发端点名称的问题。我需要检查代码以确保