python 路由转发_RabbitMQ之路由键转发消息
RabbitMQ學(xué)習(xí)
消息隊列:目前流行的有 Kafka、RabbitMQ、ActiveMQ等
功能:為了解決消息的分布式消費,完成項目、服務(wù)之間的解耦動作。消息的生產(chǎn)者與消費者之間完全采用異步通信方式,極大的提高了系統(tǒng)的響應(yīng)能力,從而提高系統(tǒng)的網(wǎng)絡(luò)請求吞吐量。
Spring-Boot 整合RabbitMQ
依賴:
org.springframework.boot
spring-boot-starter-amqp
RabbitMQ:跨平臺的分布式消息隊列服務(wù),可以部署在任意的操作系統(tǒng)上。需要Erlang環(huán)境的支持,需要安裝Erlang 和 RabbitMQ
RabbitMQ中有三種常用的轉(zhuǎn)發(fā)方式:
1.DirectExchange:路由鍵方式轉(zhuǎn)發(fā)消息
2.FanoutExchange:廣播方式轉(zhuǎn)發(fā)消息
3.TopicExchange: 主題匹配方式轉(zhuǎn)發(fā)消息
DirectExchange:消息被生產(chǎn)者發(fā)送至RabbitMQ會攜帶一個路由鍵Key,RabbitMQ會將該消息轉(zhuǎn)發(fā),只有路由鍵為Key的隊列消費者會完成消息的消費過程。
幾個重要的類:
RabbitTemplate.ConfirmCallback:用來回調(diào)消息發(fā)送成功后的方法,當(dāng)一個消息被成功寫入RabbitMQ服務(wù)端時,就會自動回調(diào)RabbitTemplate.ConfirmCallback接口內(nèi)的confirm方法完成通知。
兩個配置信息:
隊列的交換信息 ExchangeEnum
@Getter
public enumExchangeEnum{
USER_REGISTER("user.register.topic.exchange");
privateStringvalue;
ExchangeEnum(Stringvalue){
this.value= value;
}
}
隊列路由信息 QueueEnum
@Getter
public enumQueueEnum{
/**
*用戶注冊枚舉*/USER_REGISTER("user.register.queue","user.register");
/**
*隊列名稱*/privateStringname;
/**
*隊列路由鍵*/privateStringroutingKey;
QueueEnum(Stringname,StringroutingKey){
this.name= name;
this.routingKey= routingKey;
}
}
用戶注冊消息隊列配置
@Configuration
public classUserRegisterQueueConfiguration{
/**
*配置路由交換對象實例*/@Bean
publicDirectExchangeuserRegisterDirectExchange(){
return newDirectExchange(ExchangeEnum.USER_REGISTER.getValue());
}
/**
*配置用戶注冊隊列對象實例*并設(shè)置持久化隊列*/@Bean
publicQueueuserRegisterQueue(){
return newQueue(QueueEnum.USER_REGISTER.getName(),true);
}
/**
*將用戶注冊隊列綁定到路由交換配置上并設(shè)置指定路由鍵進(jìn)行轉(zhuǎn)發(fā)*
*/@Bean
publicBindinguserRegisterBinding(){
returnBindingBuilder.bind(userRegisterQueue()).to(userRegisterDirectExchange()).with(QueueEnum.USER_REGISTER.getRoutingKey());
}
}
配置交換實例:
DirectExchange實例對象,為交換設(shè)置名稱,消息提供者與消息消費者的交換名稱必須一致才可以通訊。
配置隊列實例:
Queue實例對象,為消息隊列設(shè)置名稱,生產(chǎn)者與消費者的隊列名稱也必須一致。
綁定隊列實例到交換實例中:
Binding實例對象,將Queue綁定到Exchange上,并通過設(shè)置的路由key進(jìn)行消息轉(zhuǎn)發(fā)。配置了路由key后,只有符合該路由的配置的消息才會被妝發(fā)到綁定的交換上的消息隊列。
生產(chǎn)者:
在業(yè)務(wù)邏輯完成之后,調(diào)用消息發(fā)送方法,將消息發(fā)送至隊列中
消費者:
@Component
@RabbitListener(queues = "user.register.queue")
public classUserRegisterMQ{
@RabbitHandler
public voidexecute(UserEntitymessage){
log.error("用戶:"+message.toString()+",注冊成功");
}
}
兩個注解:
@RabbitListener:隊列消息監(jiān)聽注解,該注解配置監(jiān)聽queue內(nèi)的隊列名稱列表。
@RabbitHandler 消息處理方法,該方法的參數(shù)需要與生產(chǎn)者發(fā)送消息的類型保持一致,否則無法自動調(diào)用消費方法,且無法完成消費。
本文臨摹(抄襲)我的偶像 簡書:恒宇少年 Spring-Boot 四十一章。
生產(chǎn)者和消費者是兩個不同的項目,關(guān)于RabbitMQ的配置信息一模一樣,兩個項目分別啟動,消息可以成功接收。
問題:我將消費者打包發(fā)給同事,同事無法啟動,我們在同一局域網(wǎng),但是他本地沒有安裝RabbitMQ,該問題后續(xù)定位。。。。。。。。。
SpringCloud Stream生產(chǎn)者配置RabbitMq的動態(tài)路由鍵
在寫這個文章前不得不吐槽目前國內(nèi)一些blog的文章,盡是些復(fù)制粘貼的文章,提到點上但沒任何的深入和例子.......... 經(jīng)過測試下來總結(jié)一下RabbitMQ的Exchange的特性: 1.dire ...
python中RabbitMQ的使用(路由鍵)
1.簡介 當(dāng)我們希望每個接收端接收各自希望的消息時,我們可以使用路由鍵,此時交換機的類型為direct. 2.工作原理 每個接收端的消息隊列在綁定交換機的時候,可以設(shè)定相應(yīng)的路由鍵. 發(fā)送端通過交換機 ...
消息中間件系列三:使用RabbitMq原生Java客戶端進(jìn)行消息通信(消費者(接收方)自動確認(rèn)模式、消費者(接收方)自行確認(rèn)模式、生產(chǎn)者(發(fā)送方)確認(rèn)模式)
準(zhǔn)備工作: 1)安裝RabbitMQ,參考文章:消息中間件系列二:RabbitMQ入門(基本概念.RabbitMQ的安裝和運行) 2.)分別新建名為OriginalRabbitMQProducer和O ...
RabbitMQ入門-路由-有選擇的接受消息
比如一個日志系統(tǒng),之前的處理方式呢,是各種類型(info,error,warning)的消息都發(fā)給訂閱者,可是實際情況上不一定都需要.可能A需要error,其他的都不需要.那么就引入了今天的處理方式- ...
python中RabbitMQ的使用(路由鍵模糊匹配)
路由鍵模糊匹配 使用正則表達(dá)式進(jìn)行匹配.其中“#”表示所有.全部的意思:“*”只匹配到一個詞. 匹配規(guī)則: 路由鍵:routings = [ 'happy.work', ?'happy.life' , ...
springboot rabbitmq direct exchange和topic exchange 寫法上關(guān)于路由鍵的區(qū)別
這是direct exchange寫法中消息發(fā)送寫法,可見下圖紅色框中路由鍵是queue隊列中定義的路由鍵 這是topic exchange寫法中消息發(fā)送寫法,可見下圖紅色框中路由鍵是exchange ...
RabbitMQ學(xué)習(xí)筆記2-理解消息通信
消息包含兩部分:1.有效載荷(payload) - 你想要傳輸?shù)臄?shù)據(jù).2.標(biāo)簽(lable) - 描述有效載荷的相關(guān)信息,包含具體的交換器.消息的接受興趣方等. rabbitmq的基礎(chǔ)流程如下: Ra ...
RabbitMQ 的路由模式 Topic模式
模型 生產(chǎn)者 package cn.wh; import java.io.IOException; import java.util.concurrent.TimeoutException; impo ...
Rabbitmq實現(xiàn)負(fù)載均衡與消息持久化
Rabbitmq 是對AMQP協(xié)議的一種實現(xiàn).使用范圍也比較廣泛,主要用于消息異步通訊. 一,默認(rèn)情況下Rabbitmq使用輪詢(round-robin)方式轉(zhuǎn)發(fā)消息.為了較好實現(xiàn)負(fù)載,可以在消息 ...
隨機推薦
Percona Server 5.6.13-61.0 首個 GA 版本發(fā)布
Percona Server 5.6 的首個 GA 版本發(fā)布了,版本號是 5.6.13-61.0 ,該版本基于 MySQL 5.6.13 改進(jìn)內(nèi)容包括: New Features: Percona S ...
ActiveMQ 學(xué)習(xí)筆記
http://somebody-hjh.iteye.com/blog/726050 一.概述 Message,即消息.人與人之間通過消息傳遞信息.言語.眼神.肢體動作都可被視為消息體.當(dāng)然還有我們經(jīng)常 ...
Mac實用操作技巧(三)
遠(yuǎn)程協(xié)助 很多場景下需要用到遠(yuǎn)程協(xié)助,比如你遇到了某個搞不定的bug需要他人幫助,但是別人卻不在身邊,這時就需要別人通過網(wǎng)絡(luò)來遠(yuǎn)程協(xié)助你解決問題.在Windows下有不少優(yōu)秀軟件,比如TeamView ...
ADO.NET 對數(shù)據(jù)操作
public static class SQLHelper { static string connString = ConfigurationManager.ConnectionStrings[&q ...
Java基礎(chǔ)(含思維導(dǎo)圖)
很早之前整理的Java基礎(chǔ)的一些知識點,思維導(dǎo)圖: 1.'別名現(xiàn)象' 對一個對象賦值另一個對象,會指向新的對象引用,賦值前的對象引用會由于不再被引用而被gc回收: 而基本類型則不同.基本類型存儲了實際 ...
基于C#&;.net2.0的windows服務(wù)創(chuàng)建與安裝
起因:一臺服務(wù)器中部署的程序,停電后未按照計劃任務(wù)正常啟動. 一.創(chuàng)建并配置Windows服務(wù)程序 開發(fā)工具VS2015 Framework版本2.0 1.新建Windows服務(wù) 2.在Service ...
Android中控件之間添加分割線
將以下view標(biāo)簽放置在需要分割的兩個控件之間:
centos7安裝單機rocketmq,圖文教程
系統(tǒng)環(huán)境 1.操作系統(tǒng):64位CentOS Linux release 7.2.1511 (Core) 2.jdk版本:1.8.0_121 3.IP地址:192.168.1.210 下載rocketm ...
Jmeter(九)JDBC連接池
JDBC為java訪問數(shù)據(jù)庫提供通用的API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問.因為SQL是關(guān)系式數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言,只要我們遵循SQL規(guī)范,那么我們寫的代碼既可以訪問MySQL又可以訪問SQL ...
你可能用得到的9段CSS代碼
一.opacity兼容 .transparent {??? filter: alpha(opacity=50);/* internet explorer */??? -khtml-opacity: 0 ...
總結(jié)
以上是生活随笔為你收集整理的python 路由转发_RabbitMQ之路由键转发消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动力节点老杜mysql文件_mysql主
- 下一篇: admob 服务器验证_AdMob服务器