介紹
RabbitMQ是一個開源的,基于AMQP(Advanced Message Queuing Protocol)協議的完整,可復用的企業級訊息佇列(Message Queue 一種應用程式與應用程式之間的一種通信方法)系統,RabbitMQ可以實作點對點,發布訂閱等訊息處理模式
- 官網:https://www.rabbitmq.com/dotnet.html
- 開源地址:https://github.com/rabbitmq/rabbitmq-dotnet-client
安裝
- docker下安裝 RabbitMQ
- 其他平臺安裝 RabbitMQ
為了開發方便,我在docker中安裝了RabbitMQ,RabbitMQ安裝完成后,默認埠打開地址為:http://localhost:15672,輸入默認賬號密碼,guest/guest,可以看到RabbitMQ UI界面,

快速開始
接下來我們用RabbitMQ來完成一個比較常見的生產者和消費者模式的代碼,新建兩個控制臺專案,RabbitMQConsumer和RabbitMQProducer,
分別在兩個專案中安裝組件
Install-Package RabbitMQ.Client
在RabbitMQProducer生產者專案中,添加以下代碼,
using RabbitMQ.Client;
using System;
using System.Text;
namespace RabbitMQProducer
{
class Program
{
static void Main(string[] args)
{
var factory = new ConnectionFactory()
{
HostName = "localhost",
Port = 5672,
UserName = "guest",
Password = "guest"
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
var exchange = "msg_test";
channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);
for (int i = 0; i < 10000; i++)
{
var message = $"hello,我是生產者【{i + 1}】號";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange, routingKey: "", basicProperties: null, body: body);
Console.WriteLine($"- 發送訊息:{message}");
}
}
}
}
模擬發出10000次訊息,接下來在RabbitMQConsumer消費者專案中接收訊息,代碼如下:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
namespace RabbitMQConsumer
{
class Program
{
static void Main(string[] args)
{
var factory = new ConnectionFactory()
{
HostName = "localhost",
Port = 5672,
UserName = "guest",
Password = "guest"
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
var exchange = "msg_test";
channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange, routingKey: "");
Console.WriteLine("開始監聽訊息...");
while (true)
{
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
byte[] body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($"- 接收到訊息:{message}");
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
}
}
}
}
同時啟動兩個看看效果,

一閃而過,速度還是挺快的,更多操作可以查看官方教程:https://www.rabbitmq.com/getstarted.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/56109.html
標籤:.NET Core
