Bus.Publish和Bus.Send在NServiceBus中的区别?

Bus.Publish和Bus.Send在NServiceBus中的区别?,nservicebus,Nservicebus,使用Bus.Publish发布消息和使用Bus.Send发送消息之间的本质区别是什么?我希望了解它们之间的区别,以及何时我应该选择使用其中一个而不是另一个。总线发布:当您不知道消息要发送到哪里时使用(0到多个订阅者)。 Bus.Send:向特定处理程序(客户端到服务器)发送消息时。发布用于通知多个订阅者特定事件。发布终结点将具有订阅存储,以标识向何处发送消息。发送通常用于向端点发出命令。一个命令告诉端点做一些事情,并且不应该期望得到回复(尽管有时确实需要回复,并且NSB支持这一点) 您没有看到

使用Bus.Publish发布消息和使用Bus.Send发送消息之间的本质区别是什么?我希望了解它们之间的区别,以及何时我应该选择使用其中一个而不是另一个。

总线发布:当您不知道消息要发送到哪里时使用(0到多个订阅者)。

Bus.Send:向特定处理程序(客户端到服务器)发送消息时。

发布用于通知多个订阅者特定事件。发布终结点将具有订阅存储,以标识向何处发送消息。发送通常用于向端点发出命令。一个命令告诉端点做一些事情,并且不应该期望得到回复(尽管有时确实需要回复,并且NSB支持这一点)


您没有看到Send()的目标的原因是您通过配置指定了目标。在app.config中,您将消息类型(整个程序集或类)映射到目标。执行此操作时,不必提供目标。

通常是上下文。Publish()用于发布事件类型和上下文。Send()用于命令类型

好的,但是为什么有些Send()重载没有目标?困惑…我们把语义理解得更远一点。Publish是一个事件,我们将事件视为“嘿,刚刚发生的事情。我不在乎你如何处理这些信息,但现在你去吧”,我们将Bus.Send视为命令,意思是“嘿,我需要你做点什么,我关心结果会发生什么(因此知道我将它发送给谁)”@Seankaron Yes,你在4年前发布了这篇文章,但是对其他人来说。发送命令的目标可以在配置中定义。您不需要在代码配置信息中添加任何信息,因此可以使用更简单的Send()形式,如果在配置中定义了目标,它不会将目标作为参数。感谢Adam-这很有意义,我看不出配置所起的作用。呃,上面的评论应该是:谢谢Adam-现在我明白了配置所起的作用。Bus.Send的覆盖之一是Bus.Send(字符串目的地,消息),因此您可以使用Bus.Send发送到特定队列。欢迎使用so。你的答案好像少了点什么?