【问题标题】:MSMQ: Does MSMQ guarantees sequential message passing?MSMQ:MSMQ 是否保证顺序消息传递?
【发布时间】:2016-11-18 04:33:36
【问题描述】:

经过负载测试,我发现有些数据包不连续。

这是一个基本的 WCF 服务,客户端不断发送请求。

【问题讨论】:

  • 也许this 是您正在寻找的。但我认为this 会是一个更可持续的解决方案。
  • 这是否意味着,它不能保证消息的顺序传递。
  • 根据配置,可以将项目放置在重试队列中。您的消息顺序将默认更改。不要根据消息顺序来设计解决方案。
  • MSMQ 只保证同一事务中的消息顺序。

标签: c# msmq msmq-wcf


【解决方案1】:

使用 netMsmqBinding 可以保证(按顺序、精确一次)交付。

您需要做的第一件事是创建实际的 MSMQ 消息队列事务。

其次,您必须像这样告诉 WCF 加入事务:

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void Handle(Something msg)
{
    ....
}

最后,您需要使用exactOnce 绑定参数指定服务的保证行为:

<netMsmqBinding>
  <binding name="netMsmqBinding_IMyServiceInterface" 
           exactlyOnce="true"> 
    ...
  </binding>
</netMsmqBinding>

ExactlyOnce 告诉 WCF 我们需要事务,每条消息都将按发送顺序仅发送一次。

【讨论】:

  • 感谢回复,我做了完全一样的,但不能保证顺序。
  • @User - 您是否能够让消息以错误的顺序到达?你是如何做到这一点的?您还可以发布您的服务接口和实现吗?
  • @User 您是否有一个服务正在运行或向外扩展多个?
  • Redfem,我会发布代码,是的。我发送日期时间作为方法的参数并检查它的顺序。和单一服务。
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多