MassTransit переопределяет ConversationId во время публикации

Есть ли способ переопределить или установить значение NULL в полях сборки MassTransit во время публикации сообщения? В моем конкретном случае мне нужно установить для ConversationId значение null во время публикации сообщения в моем интеграционном тесте. Чтобы опубликовать сообщение, я использую

  await Bus.Publish<ITestContractMessage>(new {TestName = "Hello World"});

Я пытался настроить шину с помощью метода ConfigurePublish, но это не помогло.

  cfg.ConfigurePublish(x => x.UseSendExecute(ctx => ctx.ConversationId = null));

Есть ли какие-либо идеи о том, как я могу это сделать?


person Paulik    schedule 31.10.2016    source источник


Ответы (1)


Вы можете установить его или любой из заголовков, используя:

await Bus.Publish<ITestContractMessage>(new {
    TestName = "Hello World!"
}, context => context.ConversationId = null);

Вы также можете установить любые другие заголовки.

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

person Chris Patterson    schedule 31.10.2016
comment
Спасибо за быстрый ответ! Но, к сожалению, этот подход не работает для ConversationId, потому что, похоже, он заполняется после вызова делегата. Некоторые из остальных заголовков, например SourceAddress, могут быть изменены таким образом. - person Paulik; 01.11.2016
comment
Я проверю порядок фильтров и исправлю то, что считаю сломанным. Его следует установить до того, как разработчик получит доступ, чтобы его можно было переопределить. - person Chris Patterson; 01.11.2016
comment
Да, он заставляет ConversationId, если его нет, поэтому нет возможности отправить его с нулевым значением. Однако он сгенерирует новый, если вы установите для него значение null. - person Chris Patterson; 03.11.2016