RabbitMQ LVC 正在提供所有消息

RabbitMQ LVC is giving all messages

所以我安装了 RabbitMQ 插件 https://github.com/rabbitmq/rabbitmq-lvc-plugin 我在 c# 中使用,通过交换发送相同的值,每次订阅者启动时他都会收到所有消息,如果我继续发送我的消费者会收到同样的消息,我不知道这是否是它应该如何工作的,但我假设我只会收到最后一条消息,我正在做的事情有什么问题吗,或者我不明白它是如何工作的? 出版商代码:

        var bus = RabbitHutch.CreateBus("host=brw20028419,brw20028414").Advanced;
        var exchange = bus.ExchangeDeclare("lvc", "x-lvc");
        var routingKey = "lvcTest";

        ThreadStart start = () =>
        {
            while (true)
            {
                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Enter)
                {
                    var messageS = new Message<string>("value");
                    bus.Publish(exchange, routingKey, false, false, messageS);
                }
                else
                {
                    break;
                }

            }
        };
        var thread = new Thread(start);
        thread.Start();

消费者代码:

        var bus = RabbitHutch.CreateBus("host=brw20028419,brw20028414").Advanced;
        var exchange = bus.ExchangeDeclare("lvc", "x-lvc");
        var queue = bus.QueueDeclare("q");
        bus.Bind(exchange, queue, "lvcTest");

        Console.WriteLine(" [*] Waiting for messages. " +
                          "To exit press CTRL+C");
        bus.Consume(queue, (body, properties, info) => Task.Factory.StartNew(() =>
        {
            var message = System.Text.Encoding.UTF8.GetString(body);
            var routingKey = info.RoutingKey;
            Console.WriteLine(" [x] Received '{0}':'{1}'",
                               routingKey, message);
        }));

"and everytime that the subscriber is up he receives all the messages, and if i keep sending the same message my consumer will get"

如项目自述文件所述

"The last value exchange acts like a direct exchange"

所以这是预期的行为。

与直接交换器的唯一区别是 lvc 交换器跟踪每个路由键的最后一条消息,因此当一个新队列使用特定绑定键绑定到交换器时,最后一条消息发布到交换器路由键等于绑定键(存储在缓存中)的路由键被发送到新添加的队列。

要理解,您可以更改生产者代码,以便在第一个消费者绑定到您的交易所后仅发送一条消息。然后将第二个消费者绑定到您的交换,使用相同的绑定密钥,即使您的生产者不发送任何新消息,第二个消费者也会收到与第一个消费者相同的消息,因为它已被 lvc 交换缓存。