消费者只能向RabbitMQ中的生产者发送消息

qnzebej0  于 2023-04-30  发布在  RabbitMQ
关注(0)|答案(1)|浏览(183)

我是RabbitMQ的新手,我试图用2个(或多个)consumers/clients创建一个1 producer/server。当生产者发送消息时,所有的消费者都会收到消息。则任何消费者也可以发送消息并且只有生产者将接收该消息。此外,生产者知道是哪个消费者发送了消息。
目前,当我从消费者那里发送消息时,所有消费者都收到了消息,这不是我想要做的,上面的场景在RabbitMQ中是否可能,有人可以给予个例子吗?谢谢!
生产者

Console.WriteLine("Producer");
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare("test-exchange", ExchangeType.Fanout);
            var queueName = channel.QueueDeclare().QueueName;
            channel.QueueBind(queueName, "test-exchange", "");

            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = System.Text.Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);

            };
            channel.BasicConsume(queueName, true, consumer);

            while (true)
            {
                var message = Console.ReadLine();
                if (message == "exit") break;

                var body = System.Text.Encoding.UTF8.GetBytes(message);
                channel.BasicPublish("test-exchange", "", null, body);
                Console.WriteLine(" [x] Sent {0}", message);
            }

消费者1

Console.WriteLine("Consumer 1");
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare("test-exchange", ExchangeType.Fanout);
            var queueName = channel.QueueDeclare().QueueName;
            channel.QueueBind(queueName, "test-exchange", "");

            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = System.Text.Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);

            };
            channel.BasicConsume(queueName, true, consumer);

            while (true)
            {
                var message = Console.ReadLine();
                if (message == "exit") break;

                var body = System.Text.Encoding.UTF8.GetBytes(message);
                channel.BasicPublish("test-exchange", "", null, body);
                Console.WriteLine(" [x] Sent {0}", message);
            }

消费者2与消费者1具有相同的代码。

bgibtngc

bgibtngc1#

这是因为您使用的是“扇出”交换。使用“直接”或“主题”交换,然后使用适当的“路由键”发布,这取决于您希望接收消息的使用者队列。

相关问题