You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MassTransit配置基于约定的Service Bus SessionId

在MassTransit中为继承BaseEvent的消息自动配置SessionId

不需要覆盖现有约定,直接新增自定义约定就能实现需求。MassTransit支持通过发送拓扑约定,批量为符合条件的消息类型配置SessionId规则。

具体实现步骤:

  1. 先定义一个针对BaseEvent的SessionId约定,提取消息自身的SessionId属性作为消息的SessionId头部:
public class BaseEventSessionIdConvention : IMessageSendTopologyConvention<BaseEvent>
{
    public void Apply(IMessageSendTopologyConfigurator<BaseEvent> configurator)
    {
        configurator.UseSessionIdFormatter(context => context.Message.SessionId);
    }
}
  1. 在MassTransit的Bus配置中注册这个约定,让所有BaseEvent的派生类自动应用该规则:
services.AddMassTransit(x =>
{
    // 注册你的消费者、消息类型等业务代码...

    x.UsingAzureServiceBus((context, cfg) =>
    {
        // 其他Service Bus基础配置...

        // 方式一:简洁写法,自动覆盖所有BaseEvent派生类
        cfg.Send<BaseEvent>(s => s.UseSessionIdFormatter(context => context.Message.SessionId));
        
        // 方式二:通过添加约定的形式注册(和方式一效果一致,选其一即可)
        cfg.ConfigureSendTopology(s =>
        {
            s.AddConvention(new BaseEventSessionIdConvention());
        });
    });
});

补充说明:

  • 两种配置方式任选其一即可,cfg.Send<BaseEvent>(...)是更轻量化的写法,会自动让所有派生类继承这个SessionId配置。
  • 配置生效后,所有继承BaseEvent的消息在发送/发布时,都会自动把自身的SessionId属性值赋值给消息的SessionId头部,完全匹配你的需求。
  • 无需修改CorrelatedBy<T>相关代码,SessionId和CorrelationId是独立的消息头部字段,这里仅针对SessionId的发送拓扑做配置。

内容的提问来源于stack exchange,提问作者deadwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:29:54