簡(jiǎn)書(shū):亞武de小文 【原創(chuàng):轉(zhuǎn)載請(qǐng)注明出處】
生產(chǎn)者與消費(fèi)者模型
LengToo上學(xué).png
RabbitMQ 是遵從 AMQP 協(xié)議的祷安, 換句話說(shuō) 姥芥, RabbitMQ 就是 AMQP協(xié)議的 Erlang 的實(shí)現(xiàn)(當(dāng)然 RabbitMQ 還支持 STOMP2 、 MQTT3 等協(xié)議 ) 0 AMQP 的模型架構(gòu)和 RabbitMQ 的模型架構(gòu)是一樣的汇鞭,生產(chǎn)者將消息發(fā)送給交換器凉唐,交換器和隊(duì)列綁定 庸追。
AMQP模型圖
AMQP模型圖.png
內(nèi)部三層
- Module Layer:
位于協(xié)議最高層,主要定義了一些供客戶端調(diào)用的命令台囱,客戶端可以利用這些命令實(shí)現(xiàn)自己的業(yè)務(wù)邏輯淡溯。例如,客戶端可以使用 Queue . Declare 命令聲明一個(gè)隊(duì)列或者使用 Basic.Consume 訂閱消費(fèi)一個(gè)隊(duì)列中的消息簿训。
- Session Layer:
位于中間層血筑,主要負(fù)責(zé)將客戶端的命令發(fā)送給服務(wù)器,再將服務(wù)端的應(yīng)答返回給客戶端煎楣,主要為客戶端與服務(wù)器之間的通信提供可靠性同步機(jī)制和錯(cuò)誤處理豺总。
- Transport Layer:
位于最底層,主要傳輸二進(jìn)制數(shù)據(jù)流 择懂,提供幀的處理喻喳、信道復(fù)用、錯(cuò)誤檢測(cè)和數(shù)據(jù)表示等困曙。
amqp生產(chǎn)者代碼
- 簡(jiǎn)易生產(chǎn)者代碼表伦,詳見(jiàn)Rabbitmq打怪升級(jí)之路(四)生產(chǎn)者與消費(fèi)者模型
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String message = "Hello,亞武de小文慷丽!";
channel.basicPublish("", QUEUE_NAME, null, msg);
amqp消費(fèi)者代碼
- 簡(jiǎn)易消費(fèi)者代碼蹦哼,詳見(jiàn)Rabbitmq打怪升級(jí)之路(四)生產(chǎn)者與消費(fèi)者模型
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
Consumer consumer = new DefaultConsumer(channel) {......}
channel.basicConsume(QUEUE_NAME, true, consumer);
常用命令
名稱 | 是否包含內(nèi)容體 | 對(duì)應(yīng)客戶端中方法 | 簡(jiǎn)要描述 |
---|---|---|---|
Connection.Start | 否 | factory.newConnection | 建立連接相關(guān) |
Connection.Close | 否 | connection.close | 關(guān)閉連接 |
Channel.Open | 否 | connection.openChannel | 開(kāi)啟信道 |
Channel.Close | 否 | channel.close | 關(guān)閉信道 |
Exchange.Declare | 否 | channel.exchangeDeclare | 聲明交換器 |
Exchange.Declare | 否 | channel.exchangeDelete | 刪除交換器 |
Queue.Declare | 否 | channel.queueDeclare | 聲明隊(duì)列 |
Queue.Bind | 否 | channel.queueBind | 隊(duì)列與交換機(jī)綁定 |
Queue.purge | 否 | channel.queuePurge | 清除隊(duì)列中的內(nèi)容 |
Queue.Delete | 否 | channel.queueDelete | 刪除隊(duì)列 |
Queue.Unbind | 否 | channel.queueUnbind | 隊(duì)列與交換機(jī)解綁 |