springboot2.0集成rabbitmq

安裝rabbitmq

簡介: rabbitmq即一個(gè)消息隊(duì)列,主要用來實(shí)現(xiàn)應(yīng)用程序的異步和解耦,消息緩沖,消息分發(fā)的作用.

由于rabbitmq依賴于erlang語言,所以先安裝erlang:

 添加erlang solutions源
$ wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
$ sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
$ sudo yum install erlang

erlang完成后安裝rabbitmq:

先下載rpm:

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

下載完成后安裝:

yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm

安裝時(shí)如果遇到下面的依賴錯(cuò)誤

Error: Package: socat-1.7.2.3-1.el6.x86_64 (epel)
 
Requires: libreadline.so.5()(64bit)

可以嘗試先執(zhí)行

$ sudo yum install socat

rabbitmq的基本操作:

$ sudo chkconfig rabbitmq-server on # 添加開機(jī)啟動RabbitMQ服務(wù)
 
$ sudo /sbin/service rabbitmq-server start # 啟動服務(wù)
 
$ sudo /sbin/service rabbitmq-server status # 查看服務(wù)狀態(tài)
 
$ sudo /sbin/service rabbitmq-server stop # 停止服務(wù)
 
 
 
# 查看當(dāng)前所有用戶
 
$ sudo rabbitmqctl list_users
 
 
 
# 查看默認(rèn)guest用戶的權(quán)限
 
$ sudo rabbitmqctl list_user_permissions guest
 
 
 
# 由于RabbitMQ默認(rèn)的賬號用戶名和密碼都是guest搜囱。為了安全起見, 先刪掉默認(rèn)用戶
 
$ sudo rabbitmqctl delete_user guest
 
 
 
# 添加新用戶
 
$ sudo rabbitmqctl add_user username password
 
 
 
# 設(shè)置用戶tag
 
$ sudo rabbitmqctl set_user_tags username administrator
 
 
 
# 賦予用戶默認(rèn)vhost的全部操作權(quán)限
 
$ sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
 
 
 
# 查看用戶的權(quán)限
 
$ sudo rabbitmqctl list_user_permissions username
 

開啟遠(yuǎn)程訪問

默認(rèn)情況下忍燥,RabbitMQ的默認(rèn)的guest用戶只允許本機(jī)訪問, 如果想讓guest用戶能夠遠(yuǎn)程訪問的話跟压,只需要將配置文件中的loopback_users列表置為空即可,如下:

{loopback_users, []}

另外關(guān)于新添加的用戶,直接就可以從遠(yuǎn)程訪問的,如果想讓新添加的用戶只能本地訪問壹店,可以將用戶名添加到上面的列表, 如只允許admin用戶本機(jī)訪問。

{loopback_users, ["admin"]}

更新配置后芝加,重啟服務(wù).

springboot2.0集成rabbitmq

pom引入start依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.properties配置:

#rabbitmq config begin
# rabbitmq服務(wù)器地址 (默認(rèn)為127.0.0.1)
spring.rabbitmq.host=127.0.0.1
# rabbitmq服務(wù)器連接端口 (默認(rèn)為5672)
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
#rabbitmq config end

rabbitmq javabean配置:

package com.snow.config;
 
 
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @Description: RabbitConfig
 * @Author: 愛飄de小子
 * @CreateDate: 2018/8/15 19:59
 * @Version: 1.0
 */
@Configuration
public class RabbitConfig {
 
    /**
     * 消費(fèi)者數(shù)量,默認(rèn)10
     */
    public static final int DEFAULT_CONCURRENT = 10;
 
    /**
     * 每個(gè)消費(fèi)者獲取最大投遞數(shù)量 默認(rèn)50
     */
    public static final int DEFAULT_PREFETCH_COUNT = 50;
 
 
    /**
     * 注入 Queue
     * @return
     */
    @Bean
    public Queue Queue() {
        return new Queue("hello");
    }
 
 
    /**
     * 并發(fā)消費(fèi)配置
     * @param configurer
     * @param connectionFactory
     * @return
     */
    @Bean("pointTaskContainerFactory")
    public SimpleRabbitListenerContainerFactory pointTaskContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setPrefetchCount(DEFAULT_PREFETCH_COUNT);
        factory.setConcurrentConsumers(DEFAULT_CONCURRENT);
        configurer.configure(factory, connectionFactory);
        return factory;
    }
 
 
 
}

發(fā)送消息:

/**
 * 注入AmqpTemplate
 */
@Autowired
private AmqpTemplate rabbitTemplate;



public void sendMessage(){
    //發(fā)送消息
    this.rabbitTemplate.convertAndSend("hello","你好,rabbitmq");
}

convertAndSend方法的第一個(gè)參數(shù)為QueueName,第二個(gè)參數(shù)為消息的內(nèi)容

接收消息:

    /**
     * 消息接受
     * @param message
     */
    @RabbitListener(queues = "hello")  //監(jiān)聽器監(jiān)聽指定的QueueName
    public void receive(String message) {
        System.out.println("接收消息:" + message);
    }
 

并發(fā)消費(fèi):

sendMessage() 發(fā)送消息后,receive() 接受消息,此時(shí)receive()接受消息,等待處理完成后,下一個(gè)消息才能進(jìn)入receive(),如果想要消息異步消費(fèi),還需配置并發(fā)消費(fèi):

    /**
     * 消息接受  并發(fā)消費(fèi)
     * @param message
     */
    @RabbitListener(queues = "hello",containerFactory = "pointTaskContainerFactory")
    public void receive(String message) {
        System.out.println("接收消息:" + message);
    }
 @RabbitListener注解中的containerFactory 是RabbitConfig配置的pointTaskContainerFactory,可以自定義如下參數(shù):

    /**
     * 消費(fèi)者數(shù)量射窒,默認(rèn)10
     */
    public static final int DEFAULT_CONCURRENT = 10;
 
    /**
     * 每個(gè)消費(fèi)者獲取最大投遞數(shù)量 默認(rèn)50
     */
    public static final int DEFAULT_PREFETCH_COUNT = 50;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脉顿,隨后出現(xiàn)的幾起案子蝌麸,更是在濱河造成了極大的恐慌橄浓,老刑警劉巖咆槽,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異懈涛,居然都是意外死亡蔽莱,警方通過查閱死者的電腦和手機(jī)弟疆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗冷,“玉大人怠苔,你說我怎么就攤上這事∫翘牵” “怎么了柑司?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锅劝。 經(jīng)常有香客問我攒驰,道長,這世上最難降的妖魔是什么故爵? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任玻粪,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奶段。我一直安慰自己饥瓷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布痹籍。 她就那樣靜靜地躺著呢铆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹲缠。 梳的紋絲不亂的頭發(fā)上棺克,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音线定,去河邊找鬼娜谊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斤讥,可吹牛的內(nèi)容都是我干的纱皆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼芭商,長吁一口氣:“原來是場噩夢啊……” “哼派草!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铛楣,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤近迁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后簸州,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鉴竭,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年岸浑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搏存。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矢洲,死狀恐怖祭埂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兵钮,我是刑警寧澤蛆橡,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站掘譬,受9級特大地震影響泰演,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葱轩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一睦焕、第九天 我趴在偏房一處隱蔽的房頂上張望藐握。 院中可真熱鬧,春花似錦垃喊、人聲如沸猾普。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽初家。三九已至,卻和暖如春乌助,著一層夾襖步出監(jiān)牢的瞬間溜在,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工他托, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掖肋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓赏参,卻偏偏與公主長得像志笼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子把篓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理籽腕,服務(wù)發(fā)現(xiàn),斷路器纸俭,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 整體架構(gòu) 部署步驟 基于 Docker 基本概念內(nèi)存節(jié)點(diǎn)只保存狀態(tài)到內(nèi)存,例外情況是:持久的 queue 的內(nèi)容將...
    mvictor閱讀 12,748評論 5 30
  • 什么叫消息隊(duì)列南窗? 消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)揍很。消息可以非常簡單,比如只包含文本字符串万伤,也可以更復(fù)...
    Agile_dev閱讀 2,370評論 0 24
  • 在企業(yè)應(yīng)用系統(tǒng)領(lǐng)域窒悔,會面對不同系統(tǒng)之間的通信、集成與整合敌买,尤其當(dāng)面臨異構(gòu)系統(tǒng)時(shí)简珠,這種分布式的調(diào)用與通信變得越發(fā)重要...
    寒劍飄零閱讀 483評論 0 0
  • 自律是對自身生活學(xué)習(xí)的精準(zhǔn)到每天每小時(shí)的理性規(guī)劃,并對此規(guī)劃付諸持之以恒的行動的自我管理虹钮。 自律不同于簡單的每天堅(jiān)...
    Viricc閱讀 2,359評論 0 1