我注意到如果队列不存在,Send(TCommand)方法不会抛出异常。我想问一下它是否需要行为?
在输出中我可以看到第一次机会异常,但我无法在Rebus代码中找到处理它的地方。
此外,我认为由于某些原因,它不会创建丢失的队列,我是对的吗? :)
如果目标队列不是事务性的,那么抛出异常会不会很好?
提前致谢
答案 0 :(得分:3)
因为你说"交易"关于队列,我假设您正在使用MSMQ。
使用MSMQ,如果目标队列不存在,只有当队列是本地时才会出现异常 - 如果队列在另一台机器上,那根本就不会发生,因为消息发往其他计算机的目的地是传出队列。
事实上,您可以发送任何不存在的计算机上的队列,并且您不会收到错误 - 该消息最终将存储在传出队列中本地机器。过了一会儿,MSMQ将放弃尝试传递消息,它将被移动到死信队列,在那里它将被安全存储,直到你删除它(或使用例如Rebus Snoop将其发送到其他地方)
当我尝试使用this code重现此问题时,我得到了以下结果(正如预期的那样):
另一件事:如果收件人队列是非事务性的,那么在发送 - 时你不会遇到任何错误,但是消息(一如既往)不会丢失! - 它是只是驻留在事务死信队列中,等待操作了解存在问题:
IMO检查收件人队列是否为事务性是没有意义的,因为收件人队列不属于发件人,因此不应将问题强加给发件人。