我是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具有相同的代码。
1条答案
按热度按时间bgibtngc1#
这是因为您使用的是“扇出”交换。使用“直接”或“主题”交换,然后使用适当的“路由键”发布,这取决于您希望接收消息的使用者队列。