如何解决无法配置 MassTransit 发送拓扑相关性 ID
我有两个 API,一个发送消息,另一个使用消费者传奇来消费该消息。在发送端,我的消息模型没有实现 CorrelatedBy 接口,但有一个我想用作相关性 ID 的字段。我从文档中了解到,应该按如下方式配置。
GlobalTopology.Send.UseCorrelationId<SubmitOrder>(x => x.OrderId);
但是,在设置之后,我在我的消费者传奇使用过的消息中没有看到相关性 ID,它是一个空的 GUID。
我还尝试了文档中概述的另一种方法,但这在我的传奇中也没有产生相关性。
Bus.Factory.CreateUsingRabbitMQ(...,cfg =>
{
cfg.Send<OrderSubmitted>(x =>
{
x.UseCorrelationId(context => context.Message.OrderId);
});
});
消息接口
public interface MyEvent {
Guid MyId { get; }
DateTime Timestamp { get; }
}
注册
builder.AddMassTransit(x => {
x.Builder.RegisterBuildCallback(bc => {
var bus = bc.Resolve<IBusControl>();
bus.Start();
});
x.AddConsumers(Assembly.GetExecutingAssembly());
x.UsingRabbitMq((context,cfg) => {
cfg.Send<MyEvent>(x => {
x.UseCorrelationId(ctx => ctx.MyId);
});
cfg.Host(new Uri(Configuration["RabbitMqHost"]),host => {
host.Username(Configuration["RabbitMqUsername"]);
host.Password(Configuration["RabbitMqPassword"]);
});
cfg.ReceiveEndpoint(Configuration["RabbitMqQueueName"],ec => {
ec.ConfigureConsumers(context);
});
cfg.ConfigureEndpoints(context);
});
});
我哪里出错了?我希望在发送时将 MyId 的值分配给 CorrelationId,并在另一端显示在我的 saga 的消费上下文中。
这里的解决方法很简单,遵循约定并将我的字段命名为 CorrelationId,一切都按预期进行。
解决方法
Consumer sagas only 使用 CorrelatedBy<Guid>
接口关联,该接口必须在消息合约中。它们不使用 CorrelationId
上的 ConsumeContext
属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。