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