Producer:生產者
Consumer:消費者
RabbitMQ:中間的框是一個隊列-RabbitMQ 代表使用者保留的消息緩衝區
依賴
<PackageReference Include="RabbitMQ.Client" Version="6.4.0" />
生產者代碼
using RabbitMQ.Client;
using System.Reflection;
using System.Text;
using System.Threading.Channels;
namespace _01.Rabbitmq.Producer
{
public class Program
{
private static string queueName = "hello";
static void Main(string[] args)
{
// 創建一個連接工廠
ConnectionFactory factory = new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest",
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
/*
*生成一個隊列
*1.隊列名稱
*2.隊列裏面的消息是否持久化默認消息存儲在內存中
*3.該隊列是否只供一個消費者進行消費是否進行共享true可以多個消費者消費
*4.是否自動刪除最後一個消費者端開連接以後該隊列是否自動刪除true自動刪除*
*5.其他參數
*/
channel.QueueDeclare("hello", false, false, false, null);//創建一個名稱爲hello的消息隊列
for (int i = 0; i < 100; i++)
{
string message = i + "Hello World"; //控制檯傳遞的消息內容
var body = Encoding.UTF8.GetBytes(message);
/*
* 發送一個消息
* 1.發送到那個交換機
* 2.路由的 key 是哪個
* 3.其他的參數信息
* 4.發送消息的消息體
*/
channel.BasicPublish(exchange:"", "hello", null, body); //開始傳遞
Console.WriteLine("已發送: {0}", message);
}
Console.ReadKey();
}
}
}
消費者代碼
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
namespace _01.Rabbitmq.Consumer
{
public class Program
{
private static string queueName = "hello";
static void Main(string[] args)
{
// 創建一個連接工廠
ConnectionFactory factory = new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest",
};
// publisher/consumer和broker之間的TCP連接
using var connection = factory.CreateConnection();
// Channel作爲輕量級的Connection極大減少了操作系統建立TCPconnection的開銷
using var channel = connection.CreateModel();
// 創建隊列/交換機(如隊列/交換機已存在的情況可不用再次創建/此創建爲:確保先開啓消費者,生產者未創建隊列/交換機而引發報錯)
channel.QueueDeclare("hello", false, false, false, null);
// 事件對象
var consumer = new EventingBasicConsumer(channel);
/*
* 消費者消費消息
* 1.消費哪個隊列
* 2.消費成功之後是否要自動應答 true 代表自動應答 false 手動應答
* 3.消費者未成功消費的回調
*/
channel.BasicConsume("hello", false, consumer);
// 接收消息回調
consumer.Received += (sender, e) =>
{
var body = e.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("已接收: {0}", message);
};
Console.ReadKey();
}
}
}