在C 中使用訊息佇列RabbitMQ

2022-02-22 06:01:33 字數 3536 閱讀 9055

參考文章:

開發環境&工具: vs2017 rabbitmq erlang執行環境

先安裝erlang執行環境然後再安裝rabbitmq

安裝和配置就不說了

預設安裝路徑:c:\program files\rabbitmq server,在rabbitmq_server-3.6.11\sbin資料夾下有bat檔案

下面直接說**

客戶端client把傳送的訊息儲存到rabbitmq中,伺服器開啟的時候會從rabbitmq中讀取儲存的訊息

專案結構圖

clinet端**(記得新增 rabbitmq.client的nuget包)

1

using

newtonsoft.json;

2using

rabbitmq.client;

3using

system;

4using

system.text;

5using

rabbitmqlib;67

namespace

rabbitmqclient8"

,30 code = $"

code_"31

};32

string jsonstr =jsonconvert.serializeobject(requestmsg);

33byte bytes =encoding.utf8.getbytes(jsonstr);

3435

//設定訊息持久化

36 ibasicproperties properties =channel.createbasicproperties();

37 properties.deliverymode = 2

;38 channel.basicpublish("", "

myfirstqueue

", properties, bytes);

3940 console.writeline("

訊息已經傳送:

" +requestmsg.tostring());41}

42}43}

44}45catch

(exception ex)

4649

console.readline();50}

51}52 }

server端**(記得新增 rabbitmq.client nuget包)

1

using

newtonsoft.json;

2using

rabbitmq.client;

3using

rabbitmq.client.events;

4using

rabbitmqlib;

5using

system;

6using

system.text;78

namespace

rabbitmqserver946

}47}48

}49catch

(exception ex)

5053

console.readline();54}

55}56 }

客戶端顯示效果

服務端顯示效果

最後還有類庫的兩個類

poster: 由於queueingbasicconsumer已經過時,所以server的**需要修改

1

try2;10

using (iconnection conn =factory.createconnection())

11using (imodel channel =conn.createmodel())12;

33//

進行消費

34 channel.basicconsume("

myfirstqueue

", false

, consumer);

35 console.writeline("

press enter to exit");

36console.readline();

37/*

該**為原始程式,正常。但queueingbasicconsumer已經過時

38//在佇列上定義乙個消費者

39queueingbasicconsumer consumer = new queueingbasicconsumer(channel);

40//消費佇列,並設定應答模式為程式主動應答

41channel.basicconsume("myfirstqueue", false, consumer);

42while (true)

4353

*/54}55

}56catch

(exception ex)

57

在C 中使用訊息佇列RabbitMQ

1 什麼是rabbitmq。詳見 作用就是提高系統的併發性,將一些不需要及時響應客戶端且占用較多資源的操作,放入佇列,再由另外乙個執行緒,去非同步處理這些佇列,可極大的提高系統的併發能力。2 安裝 a.如果沒有erlang執行環境,在安裝過程中會提醒先安裝erlang環境。注意安裝完成後必須配置環境...

c 中使用訊息

摘自 在c 中,程式採用了的驅動採用了事件驅動而不是原來的訊息驅動,雖然.net框架提供的事件已經十分豐富,但是在以前的系統中定義了豐富的訊息對系統的程式設計提供了方便的實現方法,因此在c 中使用訊息有時候還是大大提高程式設計的效率的。定義訊息 在c 中訊息需要定義成windows系統中的原始的6進...

在Flex中使用訊息服務

flex與伺服器的通訊元件除了httpservice,remoteobject,webservice外,還有producer consumer元件。producer和consumer使用messaging的方式通訊,與請求響應機制不同,這是一鐘發布訂閱機制。客戶端向伺服器訂閱訊息,當伺服器訊息發生變...