如何在MassTransit中为ActiveMQ设置自定义唯一队列名称
自动生成Generation队列、消息未进入指定队列的核心原因是:MassTransit默认会按照消息类型的名称生成默认的队列/主题路由,你当前仅配置了消费端监听event-listener队列,没有建立Generation消息类型和该队列的绑定关系,因此消息发送时走了默认路由。
解决方法
方法1:发布消息时显式指定目标队列
发送消息时通过ISendEndpointProvider手动获取目标队列的发送端点,直接指定投递到event-listener:
// 先在构造函数中注入ISendEndpointProvider private readonly ISendEndpointProvider _sendEndpointProvider; // 业务逻辑中发送消息 var targetEndpoint = await _sendEndpointProvider.GetSendEndpoint(new Uri("queue:event-listener")); await targetEndpoint.Send(new Generation { // 填充消息属性 });
方法2:全局配置消息类型与自定义队列的绑定
在MassTransit配置中直接指定Generation消息类型对应的默认实体名为event-listener,后续所有该类型消息都会默认投递到目标队列:
services.AddMassTransit(x => { x.AddConsumer<EventConsumer>(); x.UsingActiveMq((context, cfg) => { cfg.Host("localhost", h => { h.Username("admin"); h.Password("admin"); }); // 新增配置:绑定Generation消息类型到指定队列 cfg.Message<Generation>(m => { m.SetEntityName("event-listener"); }); cfg.ReceiveEndpoint("event-listener", e => { e.ConfigureConsumer<EventConsumer>(context); // 如果你使用Publish方式发送消息(走Topic模式),新增绑定配置即可 e.Bind<Generation>(); }); }); });
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

