上一篇已經講了Rabbitmq如何在Windows平台安裝,不懂請移步:RabbitMQ學習系列一:windows下安裝RabbitMQ服務
一、理論:
.net環境下,C#代碼調用RabbitMQ消息隊列,本文用easynetq開源的.net Rabbitmq api來實現。
EasyNetQ 是一個易於使用的RabbitMQ的.Net客戶端API。
RabbitMQ 是由 LShift 提供的一個 Advanced Message Queuing Protocol (AMQP) 的開源實現,由以高性能、健壯以及可伸縮性出名的 Erlang 寫成,因此也是繼承了這些優點。
AMQP 里主要要說兩個組件:Exchange 和 Queue (在 AMQP 1.0 里還會有變動),
如下圖所示,綠色的 X 就是 Exchange ,紅色的是 Queue ,這兩者都在 Server 端,又稱作 Broker ,
這部分是 RabbitMQ 實現的,而藍色的則是客戶端,通常有 Producer 和 Consumer 兩種類型:
二、asp.net項目搭建
1、新建項目(略)
2、項目nuget需要使用的三方dll,本文案例使用的版本如下圖
3、消息隊列類庫結構說明
4、BusBuilder.cs管道創建類,主要負責鏈接Rabbitmq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/// <summary>
/// 消息服務器連接器
/// </summary>
public
class
BusBuilder
{
public
static
IBus CreateMessageBus()
{
//消息服務器連接字符串
var connectionString = ConfigurationManager.ConnectionStrings[
"RabbitMQ"
];
if
(connectionString ==
null
|| connectionString.ConnectionString ==
string
.Empty)
{
throw
new
Exception(
"messageserver connection string is missing or empty"
);
}
return
RabbitHutch.CreateBus(connectionString.ConnectionString);
}
}
|
5、IProcessMessage類,定義了一個消息方法,用於消息傳遞
1
2
3
4
5
6
|
public
interface
IProcessMessage
{
void
ProcessMsg(Message msg);
void
Notice();
}
|
6、Message類,定義了消息傳遞的實體屬性字段等信息
1
2
3
4
5
6
7
8
9
10
|
public
class
Message
{
public
string
MessageID {
get
;
set
; }
public
string
MessageTitle {
get
;
set
; }
public
string
MessageBody {
get
;
set
; }
public
string
MessageRouter {
get
;
set
; }
}
|
7、MQHelper類,負責創建消息管道、創建消息管道、發送消息體等工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/// <summary>
/// 發送消息
/// </summary>
public
static
void
Publish(Message msg)
{
//// 創建消息bus
IBus bus = BusBuilder.CreateMessageBus();
try
{
using
(var publishChannel = bus.OpenPublishChannel())
//創建消息管道
{
publishChannel.Publish(msg, x => x.WithTopic(msg.MessageRouter));
//通過管道發送消息
}
}
catch
(EasyNetQException ex)
{
//處理連接消息服務器異常
}
bus.Dispose();
//與數據庫connection類似,使用后記得銷毀bus對象
}
|
8、web項目進行調用后台消息隊列方法
1
2
3
4
5
6
|
RabbitMQ.Message msg =
new
RabbitMQ.Message();
msg.MessageID =
"test"
;
msg.MessageBody = DateTime.Now.ToString();
msg.MessageTitle =
"test"
;
msg.MessageRouter =
"pcm.notice.zhangsan"
;
RabbitMQ.MQHelper.Publish(msg);
|
這樣就可以用c#發送消息到隊列中,測試結果如下圖:
查看隊列下的消息記錄
獲取隊列消息嘗試
至此,C#向Rabbitmq消息隊列發送消息已經簡單完成
下一篇:C#訂閱消息、獲取消息的方式,敬請期待。。。
附件: RabbitMQ.rar 下載 (下載需要:0 個80幣)