真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

消息隊(duì)列Rabbitmq的交換器類型有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹“消息隊(duì)列Rabbitmq的交換器類型有哪些”,在日常操作中,相信很多人在消息隊(duì)列Rabbitmq的交換器類型有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”消息隊(duì)列Rabbitmq的交換器類型有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)主營阜寧網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),阜寧h5微信小程序開發(fā)搭建,阜寧網(wǎng)站營銷推廣歡迎阜寧等地區(qū)企業(yè)咨詢

一、交換器類型

在rabbitmq中,生產(chǎn)者的消息都是通過交換器來接收,然后再從交換器分發(fā)到不同的隊(duì)列中去,在分發(fā)的過程中交換器類型會(huì)影響分發(fā)的邏輯。

rabitmq中的交換器有4種類型,分別為fanout、direct、topic、headers四種,其中前三種較為常見,后面一種用的比較少。

二、fanout

一般情況下交換器分發(fā)會(huì)先找出綁定的隊(duì)列,然后再判斷routekey,來決定是否將消息分發(fā)到某一個(gè)隊(duì)列中;但如果交換器的類型為fanout,那么交換器就不再判斷routekey了,而是將消息直接分發(fā)到綁定的隊(duì)列中去,如下測試代碼

Channel channel = connection.createChannel();    //在rabbitmq中創(chuàng)建一個(gè)信道
channel.exchangeDeclare("exchangeName", "fanout"); //創(chuàng)建一個(gè)type為fanout的交換器    
channel.queueDeclare("queueName");    //創(chuàng)建一個(gè)隊(duì)列
channel.queueBind("queueName", "exchangeName", "routingKey");   //將隊(duì)列和交換器綁定

三、direct

在類型為direct的情況下,交換器在分發(fā)消息的時(shí)候同樣會(huì)先獲取綁定的隊(duì)列,然后還會(huì)再判斷routeing;當(dāng)交換器發(fā)現(xiàn)類型為direct判斷routeing的規(guī)則是完全匹配模式,只有消息完全等于到routeing的時(shí)候,才會(huì)將消息分發(fā)到指定隊(duì)列;

一個(gè)隊(duì)列是可以指定多個(gè)路由鍵的,我們假設(shè)有兩個(gè)隊(duì)列,分別是隊(duì)列一、隊(duì)列二;在隊(duì)列一中指定了三個(gè)路由鍵,分別是zhangsan、lisi,wangwu,在隊(duì)列二中指定了一個(gè)隊(duì)列鍵lisi,指定多個(gè)路由鍵的代碼如下所示:

Channel channel = connection.createChannel();    //在rabbitmq中創(chuàng)建一個(gè)信道
channel.exchangeDeclare("exchangeName", "direct"); //創(chuàng)建一個(gè)type為direct的交換器
channel.queueDeclare("queueName");    //創(chuàng)建一個(gè)隊(duì)列
channel.queueBind("queueName", "exchangeName", "zhangsna");   //綁定并設(shè)置路由鍵
channel.queueBind("queueName", "exchangeName", "lisi");   //綁定并設(shè)置路由鍵
channel.queueBind("queueName", "exchangeName", "wangwu");   //綁定并設(shè)置路由鍵

當(dāng)生產(chǎn)者發(fā)送了一條routeting為zhangsan的消息到交換器中,交換器在分發(fā)的時(shí)候只會(huì)把消息分發(fā)到隊(duì)列一里面去,因?yàn)榻粨Q器在routeting匹配的時(shí)候只匹配到了隊(duì)列一,因此隊(duì)列二不會(huì)收到消息;

當(dāng)生產(chǎn)者再次發(fā)送了一條routeting為lisi的消息到交換器中,交換器在分發(fā)的時(shí)候會(huì)把消息分發(fā)到隊(duì)列一和隊(duì)列二兩個(gè)隊(duì)列里面去,因?yàn)榻粨Q器在routeting匹配的時(shí)候匹配都匹配成功,因此兩個(gè)隊(duì)列都收到了消息;

四、topic

在類型為topic的情況下,交換器分發(fā)消息的時(shí)候也需要同時(shí)匹配bindKey和routingKey;但與direct類型不同的是當(dāng)交換器發(fā)現(xiàn)類型為topic時(shí)候,判斷routeing的規(guī)則是模糊匹配模式。

rabitmq自定義了一套匹配規(guī)則,在這里我假設(shè)生產(chǎn)者發(fā)送了一個(gè)消息,其中的的routingKey為wiki.imooc.com,那么交換器為topic類型時(shí)候,想要獲取到這條消息,可以用*號(hào)作為通配符,來指定routingKey,分別是*.*.com、*.imooc.*、*wiki.imooc.*;同樣也可以使用#作為通配符來指定路由鍵,例如wiki.#、#.com;

在上面的通配符列子中,我們需要掌握這幾點(diǎn):

  • 路由鍵以.為分隔符,每一個(gè)分隔符的代表一個(gè)單詞

  • 通配符*匹配一個(gè)單詞、通配符#可以匹配多個(gè)單詞

  • *可以在routingKey和bindKey上使用,#只能用于RoutingKey中

五、headers

類型為headers的交換器與前面三種匹配fang式完全不一樣,它不依賴與bindingKey和routingKey,而是在綁定隊(duì)列與交換器的時(shí)候指定一個(gè)鍵值對(duì);當(dāng)交換器在分發(fā)消息的時(shí)候會(huì)先解開消息體里的headers數(shù)據(jù),然后判斷里面是否有所設(shè)置的鍵值對(duì),如果發(fā)現(xiàn)匹配成功,才將消息分發(fā)到隊(duì)列中;這種交換器類型在性能上相對(duì)來說較差,在實(shí)際工作中很少會(huì)用到。

到此,關(guān)于“消息隊(duì)列Rabbitmq的交換器類型有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


網(wǎng)站名稱:消息隊(duì)列Rabbitmq的交換器類型有哪些-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://weahome.cn/article/hosig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部