2016-07-15 4 views
1

После тестирования нагрузки я обнаружил, что некоторые пакеты не являются последовательными.MSMQ: MSMQ гарантирует последовательное передачу сообщений?

Это базовая услуга WCF, и клиент постоянно отправляет запрос.

+0

Возможно [это] (https://blogs.msdn.microsoft.com/napegadie_kones_msft_blog/2015/02/07/wcf-processes-messages-from-msmq-out-of-order-using-netmsmqbinding/) является что ты ищешь. Но я думаю, что [это] (http://stackoverflow.com/questions/13802385/how-to-enforce-message-queue-sequence-with-multiple-wcf-service-instances) будет более устойчивым решением. – khlr

+0

Означает ли это, что это не гарантирует последовательного прохождения сообщений. – User

+1

В зависимости от конфигурации элемент может быть помещен в очередь повторов. Заказ по умолчанию будет изменен по умолчанию. Не разрабатывайте решение в зависимости от порядка сообщений. –

ответ

0

Можно гарантировать (в порядке, ровно один раз) доставку с использованием netMsmqBinding.

Первое, что вам нужно сделать, это создать свою реальную транзакционную очередь сообщений MSMQ.

Во-вторых, вы должны сообщить WCF, чтобы привлечь в сделке, как так:

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

Наконец, необходимо указать гарантированную поведение службы с помощью ExactlyOnce связывания параметра Я:

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

ExactlyOnce сообщает WCF, что мы требуем транзакций, чтобы каждое сообщение доставлялось ровно один раз и в том порядке, в котором они были отправлены.

+0

Спасибо за ответ, я сделал то же самое, но это не гарантировало последовательность. – User

+0

@User - могли ли вы получать сообщения в неправильном порядке? Как вы это достигли? Также вы можете опубликовать свой сервисный интерфейс и PLS реализации? –

+0

@ У вас также есть один сервис, работающий или масштабируемый более чем один? –