RabbitMQ--Hello World
1.RabbitMQ是一个消息中间件,接收并转发消息,它能够根据设置的规则进行路由,缓存和持久化。类似于现实中的邮局。
1.1 名词解释
a. 生产者:发送消息
b. 消费者:接收消息
c. 队列:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。注意:队列本质上就是一个消息缓冲区, 只受主存和磁盘的限制。
2. Hello World
2.1 安装包
a. RabbitMQ:install-package RabbitMQ
b. RabbitMQ.Client: https://www.rabbitmq.com/releases/rabbitmq-dotnet-client/
2.2 创建一个Send类和一个Receive类,用来连接RebbitMQ
Send:
var factory = new ConnectionFactory() { HostName="localhost" }; using (var conn = factory.CreateConnection()) { using (var channel = conn.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); var message = $"hello world{DateTime.Now.ToString()}"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine($"[x] send to {message}"); } }
发送成功会后看到:
Receive:
var factory = new ConnectionFactory() { HostName = "localhost" }; using (var conn = factory.CreateConnection()) { using (var channel = conn.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 {message}"); }; channel.BasicConsume(queue:"hello", noAck: true, consumer:consumer); Console.ReadKey(); } }
接收后会看到: