RabbitMQ 消息队列使用介绍
简介
RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。具备异步、解耦等机制。
安装部署
请参阅官方文档
Docker 部署
| 12
 3
 4
 5
 6
 7
 8
 
 | # 拉取官方 RabbitMQdocker pull rabbitmq
 # 启动 RabbitMQ
 docker run -d --name myrabbitmq -p 5672:5672 -p 15672:15672 docker.io/rabbitmq:3-management
 # 设置 RabbitMQ 默认账户密码为 guest/guest
 docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management
 # WEB 端登录
 http://localhost:15672/#/
 
 | 
C#代码调用
引用 RabbitMQ.Client 库。
生产者
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | 
 
 public static void Send()
 {
 var factory = new ConnectionFactory() { HostName = "localhost" };
 using (var connection = factory.CreateConnection())
 using (var channel = connection.CreateModel())
 {
 channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);
 
 string message = "Hello World!";
 var body = Encoding.UTF8.GetBytes(message);
 
 channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
 Console.WriteLine(" [x] Sent {0}", message);
 }
 
 Console.WriteLine(" Press [enter] to exit.");
 Console.ReadLine();
 }
 
 | 
消费者
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 
 
 public static void Receive()
 {
 var factory = new ConnectionFactory() { HostName = "localhost" };
 using (var connection = factory.CreateConnection())
 using (var channel = connection.CreateModel())
 {
 channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);
 
 var consumer = new EventingBasicConsumer(channel);
 consumer.Received += (model, ea) =>
 {
 var body = ea.Body;
 var message = Encoding.UTF8.GetString(body);
 Console.WriteLine(" [x] Received {0}", message);
 };
 channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer);
 
 Console.WriteLine(" Press [enter] to exit.");
 Console.ReadLine();
 }
 }
 
 |