从 MassTransit BehaviorContext 向 EventHub Rider 发布消息

Publish message to EventHub Rider from MassTransit BehaviorContext

用于 MassTransit Event Hub Riders recommends using an IEventHubProducerProvider (part of the MassTransit.EventHub nuget package) to send messages to an EventHub. However, most MassTransit documentation suggests that when publishing a message from a message consumer, the developer should use "the closest instance of the publish endpoint 发布消息的文档。在我的应用程序中,我想在两个不同的上下文中托管相同的 MassTransitStateMachine

  1. 它使用内存总线并且它与其他生产者和消费者之间的所有消息都是同一进程的一部分。
  2. 它使用事件中心骑手接收和发布消息的位置。

在我看来,最干净的实现将推迟所有关于已发布消息进入总线配置的配置,并且根本不依赖消息使用者中的 MassTransit.EventHub。这让我问了一个问题,“我可以用 ConsumeContext 发布消息并让消息最终出现在 EventHub 上吗?或者我 依赖 IEventHubProducerProvider(或者可能提供我自己的内存中实现,它使用引擎盖下的 ConsumeContext?)"

任何有关如何执行此操作的指导将不胜感激。 IEventHubProducerProvider 似乎与 Producers guidance 不一致,但更可能的是我只是不明白某些事情。

如果您要从状态机中向事件中心生成消息,可以使用 Produce 扩展方法。它们与 PublishAsync 扩展方法具有相同的签名,但会将消息定向到事件中心。

例如(取自unit tests):

Initially(
    When(Started)
        .Then(context => context.Instance.Key = context.Data.TestKey)
        .Produce(x => Configuration.EventHubName, x => x.Init<EventHubMessage>(new {Text = $"Key: {x.Data.TestKey}"}))
        .TransitionTo(Active));