RabbmitMq初步了解和創造連線

2021-10-06 21:18:54 字數 2927 閱讀 2100

就算筆記寫的再差,也要自己寫, 寫了感覺就是自己的,其他優秀的資料看到最多,感覺也不是自己的

channel.exchangedeclare(exchange: exchange_name, type: exchange_type);

public static void exchangedeclare(this imodel model, string exchange, string type, bool durable = false, bool autodelete = false, idictionaryarguments = null)

宣告方法的五個引數

string exchange :名稱

bool autodelete ,是否自動刪除,設定為true則表是自動刪除,自刪除的前提是至少有乙個佇列或者交換器與這交換器繫結,之後所有與這個交換器繫結的佇列或者交換器都與此解綁,一般都設定為fase

idictionaryarguments ,alternate-exchange等一些結構化引數

宣告佇列

if (!isfanout)

else

繫結佇列 

public static void queuebind(this imodel model, string queue, string exchange, string routingkey, idictionaryarguments = null)

queue:佇列名

exchange:交換機

routingkey:路由key

arguments

void basicqos(uint prefetchsize, ushort prefetchcount, bool global);

配置basic內容類的qos引數。

第乙個引數是可接收訊息的大小的 0不受限制

第二個引數是處理訊息最大的數量 1 那如果接收乙個訊息,但是沒有應答,則客戶端不會收到下乙個訊息,訊息只會在佇列中阻塞

第三個引數則設定了是不是針對整個connection的,因為乙個connection可以有多個channel,如果是false則說明只是針對於這個channel的。

basic.qos是針對channel進行設定的,也就是說只有在channel建立之後才能傳送basic.qos信令。

在rabbitmq的實現中,每個channel都對應會有乙個rabbit_limiter程序,當收到basic.qos信令後,在rabbit_limiter程序中記錄信令中prefetch_count的值,同時記錄的還有該channel未ack的訊息個數。

// 1種  

eventingbasicconsumer consumer = new eventingbasicconsumer(this.channel);

// 2.種

basicgetresult result = channel.basicget(queue:"routingkey",autoack:true);

eventingbasicconsumer是基於長連線,發布訂閱模式的消費方式,節省資源且實時性好,這是開發中最常用的消費模式。

在一些需要消費者主動獲取訊息的場合,我們可以使用get方式,get方式是基於短連線的,請求響應模式的消費方式,也就是說只有消費者這邊主動請求時才獲取資料

// 訂閱事件

consumer.received += (model, bdea) =>

;

public static string basicconsume(this imodel model, string queue, bool autoack, ibasicconsumer consumer)

queue 佇列名

autoack 是否自動確認訊息,true自動確認,false 不自動要手動呼叫,建立設定為false

consumer 傳送者方式

具體實現 

//  funcfunc,

public void bindreceivemqmsg(funcfunc, icallbackfunction function, string routingkey, string exchange_name = null, string exchange_type = null)

else

channel.exchangedeclare(exchange: exchange_name, type: exchange_type);

if (!isfanout)

else

channel.queuebind(routingkey, exchange_name, isfanout ? exchange_name : "");

eventingbasicconsumer consumer = new eventingbasicconsumer(this.channel);

consumer.received += (model, bdea) =>

rbtmessage mqmsg = jsonconvert.deserializeobject(message);

function.processmsgasync(mqmsg);

bool result = true;

if (func != null)

if (result)

};channel.basicconsume(queue: routingkey, autoack: false, consumer: consumer);

}catch (exception ex)

}

rabbmitmq能寫的還有很多,但工作的原因,怕不寫就忘了,而且現在也只是了解調的階段。所以雖然筆記是流水賬,也要記錄下來

C Boost 初步了解

boost是由c 標準委員會成員發起 眾多c 業界高人參與設計並實現的乙個涉及面廣 質量高且業已廣泛使用的c 標準後備庫,其中 tr1已經被納入c 0x標準庫。不論從風格和內容組織上講,都可以認為boost專案是c 標準庫的延伸。截止到boost 1.43版本,boost專案擁有大約100個用途廣泛...

jquery 初步了解

js 建立函式有以下三種方法 1 函式關鍵字 function foo x 2 匿名函式 var func function x 3 建構函式 var func new function x alert x 建構函式每次執行時都解析函式主題 頻繁呼叫建構函式效率很低 並且建構函式不能遞迴使用 關鍵字...

Tomcat初步了解

http協議預設的埠號為80,如果伺服器的埠號為80,則url中的埠號可以省略,否則必須使用冒號加埠號指明埠。tomcat的埠號可在g soft apache tomcat 7.0.59 conf server.xml檔案中配置 訪問本機tomcat伺服器的方式 2.3.http 本機ip 8080...