5 c# rabbitmq rabbitmq-exchange
我只是在RabbitMQ上做项目,我的代码片段正好在生产者的代码下面
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "hello", null, body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
声明Exchange的消费者代码
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare("hello", "direct",false, false, false, null);
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
未声明Exchange的消费者代码
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
两个消费者代码都能很好地用于宣布交换的主要用途吗?.我很困惑,任何人都可以澄清我
Wik*_*hla 11
发布到队列只允许您实现基本的发布 - 订阅方案,其中生产者和使用者使用确切的队列.在多个消费者的情况下,在多个消费者之间分配单个消息队列.
由于交换和队列之间的路由,发布到交换允许您创建复杂的场景.
例如,扇出交换将消息路由到所有绑定队列.这样,您可以拥有一个生产者和多个使用者,并且每个消息都可以独立地复制到所有绑定队列并独立接收.
另一个交换示例,主题交换基于消息中的路由密钥和队列上的模式将消息路由到绑定队列.这引入了一种有趣的标记消息并有条件地传递消息的可能性.
有关交换类型及其配置文件的完整参考,请参阅文档:
https://www.rabbitmq.com/tutorials/amqp-concepts.html
https://www.rabbitmq.com/getstarted.html