MSMQ: гарантирует ли MSMQ последовательную передачу сообщений?

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

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


person User    schedule 15.07.2016    source источник
comment
Возможно, это то, что вы ищете. Но я думаю, что это будет более устойчивое решение.   -  person khlr    schedule 15.07.2016
comment
Означает ли это, что он не обеспечивает последовательной передачи сообщений.   -  person User    schedule 15.07.2016
comment
В зависимости от конфигурации элемент может быть помещен в очередь повторных попыток. Ваш порядок сообщений будет изменен по умолчанию. Не проектируйте свое решение в зависимости от порядка сообщений.   -  person Jeroen Heier    schedule 15.07.2016
comment
MSMQ гарантирует только последовательность сообщений в рамках одной и той же транзакции.   -  person John Breakwell    schedule 15.07.2016


Ответы (1)


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

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

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

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

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

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

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

person tom redfern    schedule 15.07.2016
comment
Спасибо за ответ, я сделал точно так же, но это не гарантирует последовательность. - person User; 15.07.2016
comment
@User - вы могли получать сообщения в неправильном порядке? Как вы этого добились? Также вы можете опубликовать свой интерфейс службы и реализацию, пожалуйста? - person tom redfern; 15.07.2016
comment
@User, у вас также работает одна служба или вы масштабируете более одной? - person tom redfern; 15.07.2016
comment
Redfem, я выложу код, ага. Я отправил дату и время в качестве параметра метода и проверил его последовательность. И разовая услуга. - person User; 16.07.2016