MSMQ同步写入远程队列

时间:2017-01-16 10:39:29

标签: c# msmq

我需要确认传递到远程队列,并且根据MSDN Exists()方法不支持远程队列检查。

根据我的说法,在以下两种情况下,邮件传递可能会失败

  • 无法访问远程计算机。
  • 计算机上的队列不存在或已被删除。

我正在使用事务性队列。设置AdministrationQueueUseDeadLetterQueue可确保不会丢失邮件。

但我希望以同步方式将消息发送到远程计算机队列。 MSMQ是否支持这一点,即使它不受设计支持,它是如何实现的?

1 个答案:

答案 0 :(得分:0)

  

MSMQ是否支持此功能,即使不支持,它也是如此   设计支持?

MSMQ服务没有任何内置方式来支持双工消息传递。

为了实现这一目标,您需要在排队频道的两端进行编码。但是,这通常很复杂。

以下链接介绍了如何使用System.Messaging实现此目的:

https://www.codeproject.com/Articles/999238/Efficient-Message-Correlation-in-MSMQ

它基于使用CorrelationId标头和ReceiveByCorrelationId()操作,这出于性能原因而出了名。

另一种方法是使用WCF,但是,这仍然依赖于使用System.Messaging的手动响应:

https://msdn.microsoft.com/en-us/library/ms751435(v=vs.110).aspx

另一种方法使用WCF和名为Duplex MSMQ的辅助库:

https://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQ

但是,这些方法都不是很好,而且都会带来不必要的复杂性。

  

我需要确认传递到远程队列

我想我们需要了解的是你所说的“确认”。如果您使用事务性队列,那么这将为从一个应用程序到另一个应用程序的消息传输提供有保证的传递语义。

另一方面,如果您需要实时响应,那么使用消息排队可能不适合您的技术。

如果您被迫使用MSMQ,那么您可能会比使用商业产品更糟糕。我已广泛使用NServiceBus,它使用MSMQ但增加了强大的消息交换模式,例如请求 - 回复。它是付费产品,但如果您只需要单线程操作,那么您可以使用免费版本。

  

我需要的是成功和失败消息的实时响应..

如果我理解正确,那么您的要求就是确认,MSMQ确实支持。参见:

https://msdn.microsoft.com/en-us/library/ms978430.aspx#bdadotnetasync2_topic4

https://msdn.microsoft.com/en-us/library/ms707129(v=vs.85).aspx