当前位置: 首页 > 知识库问答 >
问题:

与RabbitMQ竞争大众交通的消费者

白博易
2023-03-14

我已经用MassTransit实现了一个简单的发布者/使用者集,我想让使用者从同一个队列中读取消息。但是,当我运行它时,我看到很大一部分消息被发送到错误队列,而不是被消耗。从我看到的讨论(所以,论坛)来看,对于RabbitMQ来说,这应该非常非常简单(只需指向相同的队列),但它并不起作用。是否有应该设置的附加配置?

这是我的出版商

public class YourMessage { public string Text { get; set; } }
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Publisher");
        Bus.Initialize(sbc =>
        {
            sbc.UseRabbitMqRouting();
            sbc.ReceiveFrom("rabbitmq://localhost/test_queue");
        });
        var x = Console.Read();
        for (var i = 0; i <= 1000; i++)
        {
            Console.WriteLine("Message Number " + i);
            Bus.Instance.Publish(new YourMessage { "Message Number " + i });
        }
    }
}

还有我的消费者

public class YourMessage { public string Text { get; set; } }
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Consumer");
        Bus.Initialize(sbc =>
        {
            sbc.UseRabbitMqRouting();
            sbc.ReceiveFrom("rabbitmq://localhost/test_queue");
            sbc.Subscribe(subs =>
            {
                var del = new Action<IConsumeContext<YourMessage>,YourMessage>((context, msg) =>
                {
                    Console.WriteLine(msg.Text);
                });
                subs.Handler<YourMessage>(del);
            });
        });
        while (true) { }
    }
}

共有1个答案

习华灿
2023-03-14

接收方/使用者和发布方不能在同一队列中。如果您想要竞争的使用者,则该使用者的多个实例针对同一队列运行。

我们有文档,但目前缺少这一部分,所以我理解您的困惑:http://readthedocs.org/docs/masstransit/en/latest/configuration/gotchas.html#how-to-setup-a-competating-consumer如果您成功了,有关文档的帮助将非常棒。

 类似资料:
  • 我成功地建立了一个话题交换,并且能够同时向几个消费者传递消息。 我还想向竞争对手传递信息,并继续使用主题交换。我了解到,使用相同的队列名称可以让消费者竞争消息。然而,我可能弄错了,因为我无法使它工作。 为同一主题的多个侦听器设置: < li >申报话题交流 < li >对于每个侦听器,用自动生成的名称声明一个新队列 < li >用给定的主题路由关键字将此队列绑定到上面的交换 如何将相互竞争的消费者

  • 我正在尝试使用Akka和Camel的竞争性事件消费者实现。我使用Akka 2.3.2和Camel 5.8.0。我正在将camel连接到ActiveMQ代理,并使用生产者从另一端生成消息。在以下代码中,EventManager是创建消费者池的主机,Event处理器是消息处理演员。 EventManager.java EventProcessor.java 我看到的问题是,消息似乎被单个参与者使用,而

  • 问题内容: 我有2个服务。他们两个都需要订阅相同的频道。 这两个服务是负载平衡的。每个服务都在多个服务器上运行。 因此,如何确定每个服务只有1个实例消耗该通道的消息。 Redis支持此功能吗? 谢谢 问题答案: Pubsub不能这样工作- 消息会发送到所有已连接的已订阅客户端。但是,您可以对其进行设置,以使该频道是列表更新的通知。这样,所有客户端都会收到消息,但是只有一个客户端可以使用LPOP从列

  • 例如生产比较慢,而消费比较快,就会导致消费者消费到错误数据 package main import ( "fmt" "math/rand" "sync" "time" ) // 创建一把互斥锁 var lock = sync.Mutex{} // 定义缓冲区 var sce []int = make([]int, 10) // 定义生产者 fun

  • 文件描述符:256个可用套接字描述符:138个可用 显然我不能打开超过138个连接。 问题1:这个限制是基于什么?我能提高它吗?我想知道在生产机器上(需要哪种EC2实例),每个用户有一个连接是否是一个好主意。我读到过限制可能与ulimit有关,但当我在命令行上运行ulimit时,我看到的是'unlimited'。 还有什么其他的策略?

  • 主要内容:消除方法,实例,实例,实例,Verilog 书写规范,实例,实例关键字:竞争,冒险,书写规范 产生原因 数字电路中,信号传输与状态变换时都会有一定的延时。 在组合逻辑电路中,不同路径的输入信号变化传输到同一点门级电路时,在时间上有先有后,这种先后所形成的时间差称为竞争(Competition)。 由于竞争的存在,输出信号需要经过一段时间才能达到期望状态,过渡时间内可能产生瞬间的错误输出,例如尖峰脉冲。这种现象被称为冒险(Hazard)。 竞争不一定有冒险,但冒