powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF MSMQ привязка, проблема с доставкой poison сообщений
4 сообщений из 4, страница 1 из 1
WCF MSMQ привязка, проблема с доставкой poison сообщений
    #37462543
Scheduler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Описываю ситуацию, может кто сталкивался с подобной проблемой и подскажет пути решения.

Есть WCF служба, работающая с привязкой netMsmqBinding, хостится в IIS7.
Служба содержит только один метод
Код: plaintext
1.
2.
3.
4.
5.
    public interface IQueueContract
    {
        [OperationContract(IsOneWay = true)]
        void SendPayment(long id);
    }
реализация службы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    [ServiceBehavior
        (
        InstanceContextMode = InstanceContextMode.PerCall,
        ConcurrencyMode = ConcurrencyMode.Single
        )
    ]
    public class MsmqQueue : IQueueContract
    {
        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void SendPayment(long id)
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                //тут основная логика
                scope.Complete();
            }

            if (condition)
            {
                //откатить обработку сообщения
                throw new Exception("");
            }
        }
}
конфиг
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
  <system.serviceModel>
    <bindings>

      <netMsmqBinding>
        <binding name="MsmqTransactional"
                 durable="true"
                 deadLetterQueue="System"
                 maxRetryCycles="290"
                 receiveRetryCount="0"
                 retryCycleDelay="00:05:00"
                 exactlyOnce="true"
                 receiveErrorHandling="Move">
          <security mode="None" />
        </binding>

      </netMsmqBinding>
    </bindings>
    <services>

      <service name="Msmq.MsmqQueue" behaviorConfiguration="MsmqServiceMetadataEnableBehavior">
        <endpoint address="net.msmq://192.168.171.3/private/MsmqQueue/MsmqQueue.svc"
                  binding="netMsmqBinding"
                  bindingConfiguration="MsmqTransactional"
                  contract="Msmq.IQueueContract" />
      </service>

    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MsmqServiceMetadataEnableBehavior">
          <serviceMetadata httpGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
          <serviceThrottling
            maxConcurrentCalls="50"
            maxConcurrentInstances="50"
            maxConcurrentSessions="50"
            />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>
Небольшие пояснения: служба должна выполнить определенную логику. В зависимости от условий кидается Exception, тем самым перекидывая сообщение с очередь retry, для повторной доставки службе через 5 минут.

Нагрузка на службу: Сообщения службе льются только от одного клиента, в минуту 50-100 сообщений из них где-то четверть отсылается на повторную отправку.

Собственно проблема:
Те сообщения которые приходят первично - прекрасно обрабатываются, и если их не надо отправлять на повтор, то все ОК.
Если же они попадают в очередь retry, то в дальнейшем наблюдается такая ситуация. Сообщения стоят в очереди повторной отправки и не хотят идти на обработку к службе через указанный интервал времени. И лишь изредка(без каких-либо зависимостей) несколько сообщений повторно проскакивают на съедение WCF-службе. Соответственно очередь retry так и висит заполненной :(

Собственно, что нужно сделать, чтобы сообщения повторно отправлялись через указанное время в соответствии с логикой ???!!!!

P/S В тестовом режиме, когда отсылаю по 1-2 сообщения все работает как надо.
...
Рейтинг: 0 / 0
WCF MSMQ привязка, проблема с доставкой poison сообщений
    #37465570
Scheduler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
...
Рейтинг: 0 / 0
WCF MSMQ привязка, проблема с доставкой poison сообщений
    #37465783
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSMQ - ниппель с моделью FIFO. Понятно, что из очереди ошибок сообщения добавляются в хвост. Смотри, можно но ли ей задать приоритет в настройках.
...
Рейтинг: 0 / 0
WCF MSMQ привязка, проблема с доставкой poison сообщений
    #37466126
Scheduler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaMSMQ - ниппель с моделью FIFO. Понятно, что из очереди ошибок сообщения добавляются в хвост. Смотри, можно но ли ей задать приоритет в настройках.
Тут в чем-то другом проблема. Например я делаю рестарт службы и отрубаю от ней клиента, который льет ей сообщения, так в этот момент все сообщения из retry проходят через службу, а потом опять, те которые снова попадают в retry, те уже на повторную отправку так и не приходят.

Так и не могу найти решения проблемы, к сожалению.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF MSMQ привязка, проблема с доставкой poison сообщений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]