rabbitmq-5-案例1-简单的案例
最簡單的案例:
git@gitee.com:n_zhe/rabbitMQ-demo.git
?
通過簡單的例子分析mq是怎樣發(fā)送和拉取消息的:
quickStart中的簡單案例 通過簡單的案例來分析rabbitmq是怎樣發(fā)送和拉取消息的 1、查看Procuder.java文件 從最開始的ConnectionFactory開始 ①首先是常見了一個(gè)工廠 進(jìn)入ConnectionFactory中,可以明顯的看到一些基本的參數(shù),例如默認(rèn)的用戶,密碼,vhost。。。 該對象只有一個(gè)默認(rèn)的無參構(gòu)造,因此具體參數(shù)的初始化都在connectionFactory.newConnection()方法中 ②進(jìn)入newConnection()方法 public Connection newConnection() throws IOException, TimeoutException {return newConnection(this.sharedExecutor, Collections.singletonList(new Address(getHost(), getPort()))); }最終調(diào)用:
參數(shù)executor默認(rèn)為null,addrs為mq的地址+端口,clientProvideName為null
繼續(xù)觀察:
FrameHandlerFactory fhFactory = createFrameHandlerFactory();其實(shí)這個(gè)FrameHandlerFactory就是對SocketFactory進(jìn)行了一次封裝:
最終返回的為SocketFrameHandler類,該類是對Socket進(jìn)行了封裝:
繼續(xù)向下走,會使用之前的返回的FrameHander對象new一個(gè)AMQConnection對象:
?
然后會調(diào)用AMQConnection的start()方法:
下邊這個(gè)for循環(huán),第一次啟動后就直接return??
?
?
③返回AMQConnection對象
通過Connectin來創(chuàng)建Channel,返回ChannelN對象
④通過ChannelN對象的basicPublish方法發(fā)布消息
先通過exchange,routingKey等參數(shù)構(gòu)建一個(gè)Publish,進(jìn)而構(gòu)建一個(gè)AMQCommand對象
?
? 最終:
?
?流程:
?
?
消費(fèi)端:
開始也是獲取ConnectionFactory、Connection、Channel,然后通過Channel來操作(不管是生產(chǎn)端還是消費(fèi)端,mq都是通過channel來進(jìn)行操作的)
①消費(fèi)端會聲明一個(gè)消費(fèi)隊(duì)列
// 5、常見一個(gè)消費(fèi)者QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
?
②通過Channel將消費(fèi)這和消息隊(duì)列關(guān)聯(lián)
隊(duì)列消費(fèi)者,用于監(jiān)聽隊(duì)列中的消息。調(diào)用nextDelivery方法時(shí),內(nèi)部實(shí)現(xiàn)就是調(diào)用隊(duì)列的take方法。該方法的作用:獲取并移除此隊(duì)列的頭部,在元素變得可用之前一直等待(如果有必要)。說白了就是如果沒有消息,就處于阻塞狀態(tài)。
?
運(yùn)行結(jié)果:
消費(fèi)端:
等待獲取消息======生產(chǎn)端:
已經(jīng)發(fā)送消息了當(dāng)生產(chǎn)端發(fā)送消息之后,消費(fèi)端輸出:
等待獲取消息====== 消費(fèi)端hello rabbit-mq 消費(fèi)端hello rabbit-mq 消費(fèi)端hello rabbit-mq 消費(fèi)端hello rabbit-mq 消費(fèi)端hello rabbit-mq
?以上代碼沒有指定exchange,因此rabbitmq server會自動通過默認(rèn)的exchange(即default exchange)取轉(zhuǎn)發(fā)消息,如果生產(chǎn)者的routingkey和消費(fèi)端的隊(duì)列名稱相同的話,則能夠轉(zhuǎn)發(fā)成功,否則失敗
?
總結(jié)
以上是生活随笔為你收集整理的rabbitmq-5-案例1-简单的案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse中java文件报错:The
- 下一篇: rabbitmq-5-案例2-简单的案例