MassTransit 发布到错误的端点
MassTransit is publishing to the wrong endpoint
我有一个 C# 应用程序,它从一个 Azure 服务总线(外部)读取数据,然后发布到另一个 Azure 服务总线(内部)。
在我的发布class中,构造函数接受IPublishEndpoint
,在发布消息时使用:
IPublishEndpoint endpoint;
...
await endpoint.Publish(message, cancellationToken);
endpoint
的类型是:massTransit.Context.ConsumeContextScope<ExternalServiceBus.Messages.IDeviceChanged>
接收消息的上下文,而不是发布消息的上下文。我相信这会导致消息被发送回外部总线,但随后无法发布,因为没有该类型消息的端点。
我不能用 IBusControl 替换 IPublishEndpoint,因为 IBusControl 创建了一个新的 DI 范围来发布,我需要来自外部消费者过滤器的数据传递给内部发布过滤器。
如何获得正确的(内部)发布上下文?
如果您正在使用 MultiBus,IPublishEndpoint
将始终默认为正常的 IBus
实例。我不完全确定是否会使用当前范围(它应该,但我没有针对您的场景进行验证),但是您可以使用该总线接口类型为另一个总线实例获取特定的 IPublishEndpoint
键和取决于:
public class SomeConsumer :
IConsumer<SomeMessage>
{
public SomeConsumer(Bind<IInternalBus, IPublishEndpoint> publishEndpoint)
{
_publishEndpoint = publishEndpoint.Value;
}
}
您可以将 IInternalBus
替换为任何总线接口类型(包括默认总线的 IBus
)。
我有一个 C# 应用程序,它从一个 Azure 服务总线(外部)读取数据,然后发布到另一个 Azure 服务总线(内部)。
在我的发布class中,构造函数接受IPublishEndpoint
,在发布消息时使用:
IPublishEndpoint endpoint;
...
await endpoint.Publish(message, cancellationToken);
endpoint
的类型是:massTransit.Context.ConsumeContextScope<ExternalServiceBus.Messages.IDeviceChanged>
接收消息的上下文,而不是发布消息的上下文。我相信这会导致消息被发送回外部总线,但随后无法发布,因为没有该类型消息的端点。
我不能用 IBusControl 替换 IPublishEndpoint,因为 IBusControl 创建了一个新的 DI 范围来发布,我需要来自外部消费者过滤器的数据传递给内部发布过滤器。
如何获得正确的(内部)发布上下文?
如果您正在使用 MultiBus,IPublishEndpoint
将始终默认为正常的 IBus
实例。我不完全确定是否会使用当前范围(它应该,但我没有针对您的场景进行验证),但是您可以使用该总线接口类型为另一个总线实例获取特定的 IPublishEndpoint
键和取决于:
public class SomeConsumer :
IConsumer<SomeMessage>
{
public SomeConsumer(Bind<IInternalBus, IPublishEndpoint> publishEndpoint)
{
_publishEndpoint = publishEndpoint.Value;
}
}
您可以将 IInternalBus
替换为任何总线接口类型(包括默认总线的 IBus
)。