【问题标题】:How to set unique queue name for ActiveMQ in MassTransit?如何在 MassTransit 中为 ActiveMQ 设置唯一的队列名称?
【发布时间】:2021-12-04 08:24:53
【问题描述】:

在项目的StartUp中,我对MassTransit.ActiveMQ进行如下设置。但是当我运行时,它会为我创建两个队列,一个是 event-listener,另一个是 Generation

当我发布信息时,信息会进入系统生成的队列。

但我希望在我设置的队列event-listener 中发布信息。

请指导我

services.AddMassTransit(x =>
{
    x.AddConsumer<EventConsumer>();

    x.UsingActiveMq((context, cfg) =>
    {
        cfg.Host("localhost", h =>
        {  
            h.Username("admin");
            h.Password("admin");
        });

        cfg.ReceiveEndpoint("event-listener", e =>
        {
            e.ConfigureConsumer<EventConsumer>(context);
        });
    });
});

【问题讨论】:

    标签: activemq masstransit


    【解决方案1】:

    MassTransit 只会为配置的消费者或明确配置的接收端点创建队列。在上面的代码中,创建的唯一队列将被称为event-listener。对于消费者消费的每种消息类型,都会创建一个主题并创建一个虚拟主题消费者,以便接收端点可以消费每种类型的消息。

    发布消息时,会为每个发布的消息类型创建一个主题

    如果您想发送消息直接到队列,而不是发布:

    var provider = serviceProvider.GetRequiredService<ISendEndpointProvider>();
    
    var endpoint = await provider.GetSendEndpoint(new Uri("queue:event-listener"));
    
    await endpoint.Send(...);
    

    【讨论】:

    • 感谢您的解释。如何进行设置,使其不被创建为虚拟主题消费者?
    • ConfigureConsumeTopology = false 应该这样做。
    • 谢谢。但是当我尝试这个时,它不起作用,当我发布消息时,它没有进入事件监听器
    • 好吧,显然不是,因为您通过设置ConfigureConsumeTopology = false 选择退出虚拟主题/消费者。没有主题/虚拟消费者就不能拥有发布/订阅。
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2021-11-03
    • 1970-01-01
    • 2014-08-14
    • 2012-07-03
    相关资源
    最近更新 更多