【发布时间】:2016-11-18 04:33:36
【问题描述】:
经过负载测试,我发现有些数据包不连续。
这是一个基本的 WCF 服务,客户端不断发送请求。
【问题讨论】:
-
这是否意味着,它不能保证消息的顺序传递。
-
根据配置,可以将项目放置在重试队列中。您的消息顺序将默认更改。不要根据消息顺序来设计解决方案。
-
MSMQ 只保证同一事务中的消息顺序。
经过负载测试,我发现有些数据包不连续。
这是一个基本的 WCF 服务,客户端不断发送请求。
【问题讨论】:
使用 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 我们需要事务,每条消息都将按发送顺序仅发送一次。
【讨论】: