Множественные ответы на один запрос в NServiceBus достигают пункта назначения только после завершения выполнения метода Handle

Чтобы повысить отзывчивость приложения, обработчик сообщений отвечает несколькими ответами. Однако было отмечено, что сообщения доставляются в пункт назначения только после того, как обработка сообщений полностью завершена, даже если транзакция отключена следующим образом: var busConfiguration = new BusConfiguration();. BusConfiguration.Transactions() Отключить ();

у нас есть следующий код: использование MyMessages; используя NServiceBus; используя Систему;

    public class RequestDataMessageHandler : IHandleMessages<RequestDataMessage>
    {
        public IBus Bus { get; set; }

        public void Handle(RequestDataMessage message)
        {

            Console.WriteLine("Received request {0}.", message.DataId);
            Console.WriteLine("String received: {0}.", message.String);

            var response1 = new DataResponseMessage
            {
                DataId = message.DataId,
                String = "InProgress"
            };

            Bus.Reply(response1);


            try
            {
                TimeConsumingActivity();
                var response = new DataResponseMessage
                {
                    DataId = message.DataId,
                    String = message.String
                };

                Bus.Reply(response);
            }
            catch
            {
                var response2 = new DataResponseMessage
                {
                    DataId = message.DataId,
                    String = "Error in the process"            
                };
                Bus.Reply(response2);
            }
        }
    }

но наблюдатель отмечает, что response1 и response достигают пункта назначения только после выполнения TimeConsumingActivity (это не проблема порядка)

2 ответа

Пытаться:

 busConfiguration.Transactions().DoNotWrapHandlersExecutionInATransactionScope();

Итак, это в меру моего понимания. Есть несколько параметров, относящихся к транзакциям в конфигурации NSB, и я не уверен, что могу точно описать различия между ними.

Приведенная выше настройка должна препятствовать переносу ваших обработчиков в TransactionScope, который (если не отключен) может учитывать ответное сообщение, которое не будет "передано" на шину до завершения транзакции.

Другие вопросы по тегам