Rabbit MQ + Masstransit

1.升级了masstransit的包版本到7.1.8,低版本的nuget包在接收消息时必须封装消息成如下格式,

{
  "messageId": "f38c0000-76ed-beef-e12d-08d9a8ddd8e8",
  "conversationId": "f38c0000-76ed-beef-e246-08d9a8ddd8e8",
  "sourceAddress": "",
  "destinationAddress": "",
  "messageType": [
    "urn:message:Test.Messages:TestMessage"
  ],
  "message": {
    "Id": null,
    "Name": "123"
  },
  "sentTime": "2021-11-16T08:48:23.0015277Z",
  "headers": {},
  "host": {
    "machineName": "",
    "processName": "",
    "processId": 1,
    "assembly": "",
    "assemblyVersion": "1.0.0.0",
    "frameworkVersion": "4.0.30319.42000",
    "massTransitVersion": "",
    "operatingSystemVersion": "Unix 3.10.0.1160"
  }
}

如果交互的系统没有使用masstransit框架,封装成这种格式很麻烦,升级masstransit相关的包版本后,在交互时简化了消息的封装,最小的消息体格式如下:

{
    "message": {
        "value": "Some Value",
        "customerId": 27
    },
    "messageType": [
        "urn:message:MassTransit.Tests:ValueMessage"
    ]
}

2.配置(两种方式)

var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    // 定义需要启动的队列、可启动多个
    cfg.ReceiveEndpoint("event-listener", e =>
    {
        e.Consumer<EventConsumer>();
    });
});

        
await busControl.StartAsync(source.Token);
configure.UsingRabbitMq((context, cfg) =>
{   
    cfg.ReceiveEndpoint("event-listener", e =>
    {
        e.Consumer<EventConsumer>(context);
    });
});

第一种是官方给出的控制台服务的配置方式,需要手动将IBusControl和IBus注入。第二种方式默认将下面五个接口注入到容器中。

   这两种注入方式都是在bus启动之前指定要启动的队列名,如果需要在bus启动之后启动新的消息队列,通过IReceiveEndpointConnector接口创建连接,这是只能通过上述的第二种配置方式。

var connector = service.GetRequiredService<IReceiveEndpointConnector>();

var handle = connector.ConnectReceiveEndpoint("new-listener", (context, cfg) =>
{
    cfg.ConfigureConsumer<EventConsumer>(context);
});
await handle.Ready;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值