C# MSMQ同步写入远程队列

C# MSMQ同步写入远程队列,c#,msmq,C#,Msmq,我需要确认发送到远程队列,并且根据MSDN方法不支持远程队列检查 据我所知,在以下两种情况下,消息传递可能会失败 无法访问远程计算机 计算机上的队列不存在或已被删除 我正在使用事务队列。设置AdministrationQueue和UseDeadLetterQueue可确保消息不会丢失 但我需要一种同步方式将消息发送到远程机器队列。MSMQ是否支持此功能?即使设计不支持,如何实现此功能 MSMQ是否支持此功能?即使不支持,又如何实现此功能 有设计支持吗 MSMQ服务没有任何内置方式来支持双工消

我需要确认发送到远程队列,并且根据MSDN方法不支持远程队列检查

据我所知,在以下两种情况下,消息传递可能会失败

  • 无法访问远程计算机
  • 计算机上的队列不存在或已被删除
我正在使用事务队列。设置
AdministrationQueue
UseDeadLetterQueue
可确保消息不会丢失

但我需要一种同步方式将消息发送到远程机器队列。MSMQ是否支持此功能?即使设计不支持,如何实现此功能

MSMQ是否支持此功能?即使不支持,又如何实现此功能 有设计支持吗

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

为了实现这一点,您需要在排队通道的两端进行编码。然而,这通常是复杂的最多

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

它基于将CorrelationId头与ReceiveByCorrelationId()操作一起使用,这是出了名的性能问题

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

另一种方法使用WCF和一个名为:

然而,这些方法都不是很好,都引入了不必要的复杂性

我需要确认发送到远程队列

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

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

如果您被迫使用MSMQ,那么您可能会比使用商业产品做得更糟。我已经广泛使用了MSMQ,它使用MSMQ,但添加了强大的消息交换模式,如请求-应答。这是一个付费产品,但是如果你只需要一个单线程操作,那么你可以使用免费版本

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

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

MSMQ是否支持此功能?即使不支持,又如何实现此功能 有设计支持吗

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

为了实现这一点,您需要在排队通道的两端进行编码。然而,这通常是复杂的最多

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

它基于将CorrelationId头与ReceiveByCorrelationId()操作一起使用,这是出了名的性能问题

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

另一种方法使用WCF和一个名为:

然而,这些方法都不是很好,都引入了不必要的复杂性

我需要确认发送到远程队列

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

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

如果您被迫使用MSMQ,那么您可能会比使用商业产品做得更糟。我已经广泛使用了MSMQ,它使用MSMQ,但添加了强大的消息交换模式,如请求-应答。这是一个付费产品,但是如果你只需要一个单线程操作,那么你可以使用免费版本

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

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


这是一个很好的回答。是的,你说得对。我正在使用交易队列进行“确认交付”。我需要的是对成功和失败消息的实时响应,这样我就可以停止向队列发送更多消息。您提到的第一篇codeproject文章不适合我的场景。消息的使用者是从目标队列读取的windows服务。如果我们在该队列上等待CorrelationID为的消息,我们可以进入竞态条件,在竞态条件下,消息首先被拾取,我们仍然会等待消息。@Xlr8-为什么需要排队传输?还有,你说的是请求-回复,还是只需要确认?我需要请求-回复。我应该等到消息收到或被拒绝。我知道MSMQ适用于断开连接的系统,但在我的情况下,让我们假设系统处于联机状态。这是一个很好的响应。是的,你说得对。我正在使用交易队列进行“确认交付”。我需要的是对成功和失败消息的实时响应,这样我就可以停止向队列发送更多消息。您提到的第一篇codeproject文章不适合我的场景。消息的使用者是从目标队列读取的windows服务。如果我们在该队列上等待CorrelationID为的消息,我们可以进入竞态条件,在竞态条件下,消息首先被拾取,我们仍然会等待消息。@Xlr8-为什么需要排队传输?还有,你说的是请求-回复,还是只需要确认?我需要请求-回复。我应该等到消息收到或被拒绝。我知道MSMQ适用于断开连接的系统,但在我的情况下,让我们假设系统处于联机状态。