【问题标题】:MassTransit override ConversationId during PublishMassTransit 在发布期间覆盖 ConversationId
【发布时间】:2016-10-31 13:39:00
【问题描述】:

在消息发布期间是否有任何方法可以覆盖或设置为空 MassTransit 的内置字段? 对于我的特殊情况,我需要在集成测试的消息发布期间将 ConversationId 设置为 null。发布我正在使用的消息

  await Bus.Publish<ITestContractMessage>(new {TestName = "Hello World"});

我尝试使用 ConfigurePublish 方法配置总线,但没有帮助。

  cfg.ConfigurePublish(x => x.UseSendExecute(ctx => ctx.ConversationId = null));

有什么想法可以解决吗?

【问题讨论】:

    标签: c# rabbitmq masstransit


    【解决方案1】:

    您可以设置它或任何标题,使用:

    await Bus.Publish<ITestContractMessage>(new {
        TestName = "Hello World!"
    }, context => context.ConversationId = null);
    

    您也可以设置任何其他标题。

    由于在调用委托之前指定了 ConversationId,因此您应该能够清除它。至少,这就是设计,我想你会发现我做得对不对!

    【讨论】:

    • 感谢您的快速答复!但不幸的是,这种方法不适用于 ConversationId,因为看起来它是在委托调用之后填充的。其他一些标题,例如 SourceAddress 可能会以这种方式更改。
    • 我会检查过滤器的顺序并修复我发现的损坏。它应该在开发人员访问之前设置它,以便它可以被覆盖。
    • 是的,如果ConversationId 不存在,它会强制发送它,因此无法使用 null 发送它。但是,如果您将其设置为 null,它将生成一个新的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2018-03-27
    相关资源
    最近更新 更多