//////////////// 非持久化生產者
static void TestThreadFun()
{
string queueName = "hello";
string message = "abcdefghijklmnopqrstuvwxyz一二三四五六七八九十0123456789";
var body = Encoding.UTF8.GetBytes(message);
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "10.5.8.108";
// Rabbitmq服務器地址
factory.UserName = "vcyber"; // Rabbitmq服務中預先分配的賬號(賬號的權限決定後面的操作是否合法)
factory.Password = "123456"; // Rabbitmq服務賬號的密碼
bool durable = false; // 是否持久化
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
// 聲明一個隊列,並且指定隊列名稱和屬性
// queueName:隊列名稱
// durable:非 持久化
// false1:非 所有生產者斷開連接之後,自動銷燬消息隊列
// false2:非 所有消費者斷開連接之後,自動銷燬消息隊列
// null:
// 備註:如果同名的消息隊列已經存在,且新指定的屬性與已存在的不同,則拋出異常
channel.QueueDeclare(queueName, durable, false, false, null);
for (int i = 0; i < nRequestCount; ++i)
{
// 發送一個消息
// "":交換機名稱
// queueName:路由鍵
// null:
// body:發送數據
channel.BasicPublish("", queueName, null, body); // 消息爲非持久化
}
}
}
}
//////////////// 持久化生產者
static void TestThreadFun()
{
string queueName = "hello";
string message = "abcdefghijklmnopqrstuvwxyz一二三四五六七八九十0123456789";
var body = Encoding.UTF8.GetBytes(message);
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "10.5.8.108";
// Rabbitmq服務器地址
factory.UserName = "vcyber"; // Rabbitmq服務中預先分配的賬號(賬號的權限決定後面的操作是否合法)
factory.Password = "123456"; // Rabbitmq服務賬號的密碼
bool durable = true; // 是否持久化
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
// 聲明一個隊列,並且指定隊列名稱和屬性
// queueName:隊列名稱
// durable: 持久化
// false1: 非 所有生產者斷開連接之後,自動銷燬消息隊列
// false2: 非 所有消費者斷開連接之後,自動銷燬消息隊列
// null:
// 備註:如果同名的消息隊列已經存在,且新指定的屬性與已存在的不同,則拋出異常
channel.QueueDeclare(queueName, durable, false, false, null);
// 創建一個屬性對象,設置持久化爲true
IBasicProperties properties = channel.CreateBasicProperties();
properties.SetPersistent(true);
for (int i = 0; i < nRequestCount; ++i)
{
// 發送一個消息
// "":交換機名稱
// queueName:路由鍵
// properties:持久化爲true的屬性對象
// body:發送數據
channel.BasicPublish("", queueName, properties, body); // 消息爲非持久化
}
}
}
}
//////////////// 非持久化消費者
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "10.5.8.108";
// Rabbitmq服務器地址
factory.UserName = "vcyber"; // Rabbitmq服務中預先分配的賬號(賬號的權限決定後面的操作是否合法)
factory.Password = "123456"; // Rabbitmq服務賬號的密碼
string queueName = "hello"; // 消息隊列名字
bool durable = false; // 是否持久化
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
// 聲明一個隊列,並且指定隊列名稱和屬性
// queueName:隊列名稱
// durable:非 持久化
// false1:非 所有生產者斷開連接之後,自動銷燬消息隊列
// false2:非 所有消費者斷開連接之後,自動銷燬消息隊列
// null:
// 備註:如果同名的消息隊列已經存在,且新指定的屬性與已存在的不同,則拋出異常
channel.QueueDeclare(queueName, durable, false, false, null);
// 創建一個消費者
var consumer = new QueueingBasicConsumer(channel);
// 啓動一個消費者
// queueName:隊列名稱
// true:不需要回應。server將msg返回給消費者後,自動將本地消息刪除。
該參數的使用與隊列的持久化屬性配合使用。非持久化隊列,設置true;持久化隊列,設置爲false。
// consumer:消費者對象
channel.BasicConsume(queueName, true, consumer);
while (true)
{
BasicDeliverEventArgs ea = null;
// 嘗試獲取消息
// 1000:超時時間,ms
// ea:返回參數,函數成功時攜帶返回的消息
if (!consumer.Queue.Dequeue(1000, out ea))
{
break;
}
}
}
}
}
//////////////// 持久化消費者
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "10.5.8.108";
// Rabbitmq服務器地址
factory.UserName = "vcyber"; // Rabbitmq服務中預先分配的賬號(賬號的權限決定後面的操作是否合法)
factory.Password = "123456"; // Rabbitmq服務賬號的密碼
string queueName = "hello"; // 消息隊列名字
bool durable = true; // 持久化
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
// 聲明一個隊列,並且指定隊列名稱和屬性
// queueName:隊列名稱
// durable:持久化
// false1:非 所有生產者斷開連接之後,自動銷燬消息隊列
// false2:非 所有消費者斷開連接之後,自動銷燬消息隊列
// null:
// 備註:如果同名的消息隊列已經存在,且新指定的屬性與已存在的不同,則拋出異常
channel.QueueDeclare(queueName, durable, false, false, null);
// 創建一個消費者
var consumer = new QueueingBasicConsumer(channel);
// 啓動一個消費者
// queueName:隊列名稱
// true:需要回應。server將msg返回給消費者後,需要等到消費者返回確認之後,纔會將本地消息刪除。
該參數的使用與隊列的持久化屬性配合使用。非持久化隊列,設置true;持久化隊列,設置爲false。
// consumer:消費者對象
channel.BasicConsume(queueName, false, consumer);
while (true)
{
BasicDeliverEventArgs ea = null;
// 嘗試獲取消息
// 1000:超時時間,ms
// ea:返回參數,函數成功時攜帶返回的消息
if (!consumer.Queue.Dequeue(1000, out ea))
{
break;
}
// 向server發送確認
channel.BasicAck(ea.DeliveryTag, false);
}
}
}
}
Rabbitmq源碼示例(生產者/消費者,非持久化/持久化)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.