如何解决从 MassTransit BehaviorContext 向 EventHub Rider 发布消息
MassTransit Event Hub Riders 的文档建议使用 IEventHubProducerProvider
(MassTransit.EventHub
nuget 包的一部分)向 EventHub 发送消息。但是,大多数 MassTransit 文档都建议在从消息使用者发布消息时,开发人员应使用“the closest instance of the publish endpoint”来发布消息。在我的应用程序中,我想在两个不同的上下文中托管相同的 MassTransitStateMachine
:
- 它使用内存总线,并且它与其他生产者和消费者之间的所有消息都属于同一进程。
- 使用事件中心附加程序接收和发布消息的位置。
在我看来,最简洁的实现方式是将已发布消息的所有配置推迟到总线配置,并且完全不依赖于消息使用者中的 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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。