NServiceBus在幕后

时间:2014-04-16 14:01:38

标签: nservicebus

从发送者/接收者的角度来看,它们之间有一些叫做BUS的东西,它们处理消息,释放我们的发送者线程,并在接收者可用时发送消息,并在接收者不可用时重试。

只想了解这个神奇的“BUS”在幕后生活在哪里?在发件人机器?它只是发送方机器中的输出队列吗?

如果它只是发件人中的输出队列,如果发件人离线,它将如何重试?

2 个答案:

答案 0 :(得分:3)

所以,基本上,"巴士"生活?这假设只有一个"总线"这不一定准确。

想想"巴士"像你的以太网卡。你不能说"以太网在哪里生活?"

实际上,既然你在询问NServiceBus,那么#"总线"是对许多组件的抽象,包括消息处理程序,消息序列化程序(通常是XML或JSON),底层消息传输(MSMQ,RabbitMQ,ActiveMQ,SQL Server,Azure或其他),它们本身当然是TCP的抽象等。该框架在发送或发布的任何消息的发送方和接收方都运行,以便为您提供自动重试等功能。

问题非常广泛,因此无法以简明的方式完全回答,幸运的是有人(免责声明:有人是我)already wrote a book about that。毫不奇怪,我强烈推荐它。 ; - )

答案 1 :(得分:1)

在MSMQ传输的情况下,Bus.Send始终是本地操作。消息存储在本地传出队列中。 MSMQ负责PC之间的可靠传输。

这个概念叫做store and forward

如果本地传出队列出现问题(例如队列已满),NServiceBus将抛出异常并由发送代码重新进行重试。

NServiceBus重试进入接收端,即。收件人成功收到邮件后。

总线抽象了发送方和接收方之间的整个端到端通信。

一切都从

开始

Bus.Send<MyMessage>()

并结束,经常在另一台PC上,

MyHandler : IHandleMessages<MyMessage>