日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rabbitmq-5-案例1-简单的案例

發(fā)布時(shí)間:2024/9/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rabbitmq-5-案例1-简单的案例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最簡單的案例:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。