Rebus transport, MSMQ / SQL



在Rebus中发布时,如果MSMQ未运行或MSMQ服务中存在其他错误,则抛出异常。在发布前是否有内置的解决方案(在Rebus中)进行检查?或者我必须使用。net服务控制器?

关于使用SQLServer作为传输,在广域网中性能和可靠性如何?雷布斯是怎么做到的?有一些示例代码之类的吗?

Transport(t => t.UseMsmq...)
Transport(t => t.UseSqlServer...)

在Rebus中发布时,如果MSMQ未运行或MSMQ服务中存在其他错误,则抛出异常。在发布前是否有内置的解决方案(在Rebus中)进行检查?或者我必须使用。net服务控制器?

如果我是你,我会简单地尝试await bus.Send(..),然后捕获可能由此抛出的任何异常。这样,您就可以更好地了解所处理的错误类型,并且它避免了您可能遇到的竞争条件(*)

对于在这种情况下捕获异常时该怎么做,我没有一般的建议。

通常风险是足够低的,实际上没有意义建立一个机制来克服它,因为你可能会侥幸通过记录你打算发送的消息的内容作为一个错误,然后让别人手动处理它。

但有时建立某种"本地发件箱"或可用于临时存储无法发送的消息的东西可能是有意义的。但是,由于MSMQ是一个本地运行的服务,您可以像监视所有其他Windows服务一样监视它,并且在与它通信时不涉及远程,因此您可以使它比几乎任何其他服务都更可靠。

关于使用SQLServer作为传输,在广域网中性能和可靠性如何?雷布斯是怎么做到的?有一些示例代码之类的吗?

使用SQL Server作为传输可以工作,如果你的要求是适度的。SQL Server并不是一个真正的消息队列,而且它不能很好地处理长队列(如成千上万条消息),因为队列长度会影响接收性能。

此外,它需要你做远程,当你发送和接收消息,所以我的猜测是,你将很难使它尽可能可靠MSMQ当你发送(没关系,当收到,因为端点会恢复当连接恢复后再停机,但是当你第一次发送,可能在web请求,你真正想要的交通能够照顾消息)。

在样本存储库中有一堆样本,Rebus.SqlServer存储库中有几个测试,如果你想使用SQL Server做任何事情,可能会很有趣。例如,TestSqlAllTheWay测试是有趣的IMO:)


(*)如果你这样做了:

  1. 检查MSMQ是否存在

如果MSMQ在1和2之间停止了/中断了/无论如何你都会得到一个异常

相关内容

  • 没有找到相关文章

最新更新