我有一個 C# 應用程式,它從一個 Azure 服務總線(外部)讀取,然后發布到另一個 Azure 服務總線(內部)。
在我的發布類中,建構式接受IPublishEndpoint,在發布訊息時使用:
IPublishEndpoint endpoint;
...
await endpoint.Publish(message, cancellationToken);
的型別endpoint是:massTransit.Context.ConsumeContextScope<ExternalServiceBus.Messages.IDeviceChanged>
這是接收訊息的背景關系,而不是應該發布訊息的背景關系。我相信這會導致訊息被發送回外部總線,但隨后無法發布,因為沒有該型別訊息的端點。
我不能用 IBusControl 替換 IPublishEndpoint,因為 IBusControl 創建了一個新的 DI 范圍來發布,我需要來自外部消費者過濾器的資料傳遞給內部發布過濾器。
如何獲得正確的(內部)發布背景關系?
uj5u.com熱心網友回復:
如果您使用 MultiBus,IPublishEndpoint將始終默認為普通IBus實體。我不完全確定是否會使用當前范圍(應該使用,但我還沒有針對您的場景驗證它),但是您可以IPublishEndpoint使用該總線介面型別作為鍵獲取另一個總線實體的特定資訊,具體取決于:
public class SomeConsumer :
IConsumer<SomeMessage>
{
public SomeConsumer(Bind<IInternalBus, IPublishEndpoint> publishEndpoint)
{
_publishEndpoint = publishEndpoint.Value;
}
}
您可以替換IInternalBus為任何總線介面型別(包括IBus默認總線)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364120.html
下一篇:檢查通用屬性的特定值
