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

问题描述 投票:0回答:1

我是 RabbitMQ 的新手,我正在尝试创建一个 1

producer/server
和 2(或多个)
consumers/clients
。当生产者发送一条消息时,所有的消费者都会收到这条消息。那么任何消费者也可以发送消息,只有生产者会收到消息。此外,生产者知道哪个消费者发送了消息。

目前,当我从消费者发送消息时,他们都收到了消息,这不是我想要做的,在 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);
            }

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

c# .net rabbitmq console-application
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.