首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rebus传输,MSMQ / SQL

Rebus传输,MSMQ / SQL
EN

Stack Overflow用户
提问于 2016-11-16 09:11:08
回答 1查看 1.2K关注 0票数 2

在Rebus中发布时,如果MSMQ没有运行或MSMQ服务中的其他错误,则会引发异常。在发布之前,是否有一个内置解决方案(在Rebus中)可以检查?还是我必须使用.Net服务控制器?

关于使用SQLServer作为传输,广域网的性能和可靠性如何?雷布斯是怎么做到的?有什么样本代码吗?

代码语言:javascript
复制
Transport(t => t.UseMsmq...)
Transport(t => t.UseSqlServer...)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 10:05:54

在Rebus中发布时,如果MSMQ没有运行或MSMQ服务中的其他错误,则会引发异常。在发布之前,是否有一个内置解决方案(在Rebus中)可以检查?还是我必须使用.Net服务控制器?

如果我是您,我只需尝试await bus.Send(..),然后捕获任何可能被抛出的异常。这样,您将在处理错误的类型方面得到更好的处理,而且它还避免了否则会遇到的竞争条件(*)。

对于在这种情况下遇到异常时,我没有一般性的建议。

通常情况下,风险很低,因此实际上构建一种能够克服它的机制是没有意义的,因为您可能会将您打算发送的消息的内容记录为错误,而不是让人手动处理。

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

关于使用SQLServer作为传输,广域网的性能和可靠性如何?雷布斯是怎么做到的?有什么样本代码吗?

如果您的需求不大,使用Server作为传输可以正常工作。SQL Server并不是真正的消息队列,它不能很好地处理长队列(如10或1000条消息),因为队列长度会影响接收性能。

此外,它将要求您在发送和接收消息时进行远程处理,因此我的猜测是,当您发送消息时,您将很难使其与MSMQ一样可靠(接收时并不那么重要,因为当一个连接在中断后再次恢复时,端点将简单地恢复--但是当您第一次发送时(可能是在web请求中),您真的希望传输能够处理该消息)。

样本储存库中有很多示例,如果您想在所有方面都使用Server,那么存储库有几个测试可能会很有趣。例如,TestSqlAllTheWay测试很有趣,IMO :)

(*)如果你这样做:

  1. 检查是否存在MSMQ
  2. 发送

如果MSMQ停止/中断/任何介于1到2之间的权限,您将得到一个异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40628008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档