2016-10-31 77 views
0

在發佈消息期間,是否有任何方法覆蓋或設置爲null MassTransit的內置字段? 對於我的特殊情況,我需要在集成測試中的消息發佈期間將ConversationId設置爲null。發佈消息我正在使用MassTransit覆蓋發佈期間的ConversationId

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

我試過使用ConfigurePublish方法配置總線,但它沒有幫助。

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

有沒有關於如何實現它的任何想法?

回答

1

您可以設置它,或任何頭,使用:

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

您可以設置任何其他頭爲好。

由於ConversationId是在委託調用之前指定的,因此您應該可以清除它。至少,那是設計,我想你會發現我是否做得對!

+0

感謝您的快速回答!但不幸的是,這種方法對ConversationId不起作用,因爲,看起來,它在委託調用後填充。 其他一些頭文件,例如SourceAddress可能會以這種方式更改。 – Paulik

+0

我會檢查過濾器順序並修復發現的問題。它應該在開發人員訪問之前設置它,以便它可以被覆蓋。 –

+0

是的,如果它不存在,它會強制'ConversationId',所以沒有辦法用null發送它。但是,如果將其設置爲空,它將生成一個新的。 –