Rabbitmq使用必須理解的一些概念
(轉(zhuǎn)自:http://www.linuxidc.com/Linux/2013-11/92591.htm)
channel:通道,amqp支持一個(gè)tcp連接上啟用多個(gè)mq通信通道,每個(gè)通道都可以被作為通信流。
producer:生產(chǎn)者,是消息產(chǎn)生的源頭。
exchange:交換機(jī),可以理解為具有路由表的路由規(guī)則。
queues:隊(duì)列,裝載消息的緩存容器。
consumer:消費(fèi)者,連接到隊(duì)列并取走消息的客戶端。
核心思想:在RabbitMQ中,生產(chǎn)者從不直接將消息發(fā)送給隊(duì)列。
事實(shí)上,有些生產(chǎn)者甚至不知道消息是否被送到某個(gè)隊(duì)列中去了。生產(chǎn)者只負(fù)責(zé)將消息送給交換機(jī),而交換機(jī)確切地知道什么消息應(yīng)該送到哪。
bind:綁定,實(shí)際上可以理解為交換機(jī)的路由規(guī)則。每個(gè)消息都有一個(gè)稱為路由鍵的屬性(routing key),就是一個(gè)簡(jiǎn)單的字符串。一個(gè)綁定將【交換機(jī),路由鍵,消息送達(dá)隊(duì)列】三者綁定在一起,形成一條路由規(guī)則。
exchange type:交換機(jī)類型:
fanout:不處理路由鍵,轉(zhuǎn)發(fā)到所有綁定的隊(duì)列上
direct:處理路由鍵,必須完全匹配,即路由鍵字符串相同才會(huì)轉(zhuǎn)發(fā)
topic:路由鍵模式匹配,此時(shí)隊(duì)列需要綁定要一個(gè)模式上。符號(hào)“#”匹配一個(gè)或多個(gè)詞,符號(hào)“*”匹配不多不少一個(gè)詞。因此“audit.#”能夠匹配到“audit.irs.corporate”,但是“audit.*” 只會(huì)匹配到“audit.irs”
創(chuàng)新互聯(lián)是專業(yè)的蠡縣網(wǎng)站建設(shè)公司,蠡縣接單;提供成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行蠡縣網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
創(chuàng)建或者聲明一個(gè)exchange
/**
* amqp_exchange_declare
*
* @param [in] connect連接 amqp_new_connection獲取
* @param [in] channel the channel to do the RPC on,程序自己設(shè)置一個(gè)通道號(hào),一個(gè)連接可以多個(gè)通道號(hào)。
* @param [in] exchange 指定exchange名稱 eg:amqp_cstring_bytes("exchange_cat")
* @param [in] type 指定exchange類型,amqp_cstring_bytes("direct")
* "fanout" 廣播的方式,發(fā)送到該exchange的所有隊(duì)列上。
* "direct" 通過(guò)路由鍵發(fā)送到指定的隊(duì)列上。
* "topic" 通過(guò)匹配路由鍵的方式獲取,使用通配符*,#
* @param [in] passive 檢測(cè)exchange是否存在,設(shè)為true,若隊(duì)列存在則命令成功返回(調(diào)用其他參數(shù)不會(huì)影響exchange屬性),若不存在不會(huì)創(chuàng)建exchange,返回錯(cuò)誤。設(shè)為false,如果exchange不存在則創(chuàng)建exchange,調(diào)用成功返回。如果exchange已經(jīng)存在,并且匹配現(xiàn)在exchange的話則成功返回,如果不匹配則exchange聲明失敗。
* @param [in] durable 隊(duì)列是否持久化
* @param [in] auto_delete 連接斷開(kāi)的時(shí)候,exchange是否自動(dòng)刪除
* @param [in] internal internal
* @param [in] arguments arguments
* @returns amqp_exchange_declare_ok_t
*/
AMQP_PUBLIC_FUNCTION
amqp_exchange_declare_ok_t *
AMQP_CALL amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t auto_delete, amqp_boolean_t internal, amqp_table_t arguments);
調(diào)用函數(shù)之后,使用amqp_get_rpc_reply(conn)來(lái)獲取調(diào)用結(jié)果。
amqp_exchange_declare(conn, 1, amqp_cstring_bytes("exchange_cat"), amqp_cstring_bytes("direct"), 1, 1, 0,0, amqp_empty_table);
die_on_amqp_error(amqp_get_rpc_reply(conn), "Declaring exchange");
注意事項(xiàng)
amqp_exchange_declare函數(shù)中的參數(shù)passive設(shè)置為0,會(huì)出現(xiàn)在聲明exchange之后,聲明隊(duì)列amqp_queue_declare處于死循環(huán)的問(wèn)題
amqp_exchange_declare(m_connState, 1, amqp_cstring_bytes(strExchange.c_str()), amqp_cstring_bytes("fanout"), 0, 1, 0, 0, amqp_empty_table);
amqp_queue_declare(m_connState, 1, amqp_cstring_bytes(strQueue.c_str()), 0, 0, 0, 1, amqp_empty_table);
amqp_queue_bind(m_connState, 1, amqp_cstring_bytes(strQueue.c_str()), amqp_cstring_bytes(strExchange.c_str()), amqp_empty_bytes, amqp_empty_table);
網(wǎng)站題目:RabbitMQ第三課基本概念和exchange
文章地址:http://muchs.cn/article42/gddgec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化、ChatGPT、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)