【问题标题】:MassTransit is publishing to the wrong endpointMassTransit 发布到错误的端点
【发布时间】:2021-11-23 17:52:16
【问题描述】:

我有一个 C# 应用程序,它从一个 Azure 服务总线(外部)读取数据,然后发布到另一个 Azure 服务总线(内部)。

在我的发布类中,构造函数接受IPublishEndpoint,在发布消息时使用:

IPublishEndpoint endpoint;
...
await endpoint.Publish(message, cancellationToken);

endpoint的类型是:massTransit.Context.ConsumeContextScope<ExternalServiceBus.Messages.IDeviceChanged>

接收消息的上下文,而不是应该发布的上下文。我相信这会导致消息被发送回外部总线,但由于没有该类型消息的端点,因此无法发布。

我无法将 IPublishEndpoint 替换为 IBusControl,因为 IBusControl 创建了一个新的 DI 范围以用于发布,并且我需要来自外部消费者过滤器的数据传递给内部发布过滤器。

如何获得正确的(内部)发布上下文?

【问题讨论】:

  • 你在使用multi-bus吗?
  • @ChrisPatterson 是的

标签: c# masstransit


【解决方案1】:

如果您使用 MultiBus,IPublishEndpoint 将始终默认为普通的 IBus 实例。我不完全确定是否会使用当前范围(应该使用,但我尚未针对您的场景进行验证),但您可以使用该总线接口类型作为键和获取另一个总线实例的特定 IPublishEndpoint取决于:

public class SomeConsumer :
    IConsumer<SomeMessage>
{
    public SomeConsumer(Bind<IInternalBus, IPublishEndpoint> publishEndpoint)
    {
        _publishEndpoint = publishEndpoint.Value;
    }
}

您可以将IInternalBus 替换为任何总线接口类型(包括默认总线的IBus)。

【讨论】:

  • 那行得通。谢谢克里斯。
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多