RabbitMQ的安裝以及使用

前言

MQ,消息隊列,排隊處理消息。以下爲如何離線安裝rabbitMQ

一、Linux安裝rabbitMQ

1、前提

(1)mq以及erlang下載地址: https://www.rabbitmq.com/install-rpm.html#downloads ,有四個,選擇第一個即可。我這裏選擇的是3.6.6版本。

(2)rabbitMQ是用erlang語言寫的,需要先安裝erlang

(3)在 /user/local/ 下新建文件夾rabbitMQ,將兩個安裝包複製到這裏。

2、安裝erlang

(1)在rabbitMQ文件夾下,安裝erlang

rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm

(2)驗證是否安裝成功

3、安裝rabbitMQ

(1)安裝

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

(2)如果提示依賴檢測失敗,安裝socat 

yum install socat

(3)再次安裝rabbitMQ

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

二、配置

1、開啓服務和查看狀態

service rabbitmq-server stop #關閉
service rabbitmq-server start #啓動
service rabbitmq-server status #狀態

2、添加用戶 admin、用戶授權

(1)添加用戶、授權

rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

(2)查詢用戶

rabbitmqctl list_users

(3)查詢用戶權限

rabbitmqctl list_permissions -p /

3、開啓遠程訪問

修改配置文件 /etc/rabbitmq/rabbitmq.config

進入 /etc/rabbitmq/  沒有rabbitmq.config

直接新建編輯 vi rabbitmq.config

 

rabbitmq.config裏添加以下配置

[

    {rabbit,

        [

            {tcp_listeners, [5672]},

            {loopback_users, ["admin"]}

        ]

    }

].

4、開啓web管理界面

(1)開啓web管理界面

rabbitmq-plugins enable rabbitmq_management

(2)開放5672(代碼訪問端口)和15672(web頁面端口)端口

firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload

5、瀏覽器訪問

ip:15672 例如: 192.168.1.206:15672

輸入添加的用戶名和密碼登錄

三、springboot結合rabbitMQ

1、添加依賴

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

2、application.properties裏配置

spring.rabbitmq.host=192.168.1.102
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000
#採用消息確認模式,消息發出去後,異步等待響應
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true

#消費端配置
#消費者監聽併發數
spring.rabbitmq.listener.simple.concurrency=10
#最大併發數
spring.rabbitmq.listener.simple.max-concurrency=20
#簽收模式  推薦使用manual手工簽收
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#限流,每次消費一條,完事再取
spring.rabbitmq.listener.simple.prefetch=5

3、配置類

創建RabbitMQ的配置類 RabbitConfig,用來配置隊列、交換器、路由等高級信息。這裏我們以入門爲主,先以最小化的配置來定義,以完成一個基本的生產和消費過程。

4、生產者

通過注入 AmqpTemplate接口的實例來實現消息的發送, AmqpTemplate接口定義了一套針對AMQP協議的基礎操作。在Spring Boot中會根據配置來注入其具體實現。在該生產者,我們會產生一個字符串,併發送到名爲 hello的隊列中。

5、消費者

通過 @RabbitListener註解定義該類對 hello隊列的監聽,並用 @RabbitHandler註解來指定對消息的處理方法。所以,該消費者實現了對 hello隊列的消費,消費操作爲輸出消息的字符串內容。

6、測試

(1)創建測試類

(2)啓動應用主類

從控制檯中,我們看到如下內容,程序創建了一個訪問 127.0.0.1:5672的連接。

(3)運行測試類

運行單元測試類,我們可以看到控制檯中輸出下面的內容,消息被髮送到了RabbitMQ Server的 hello隊列中。

(4)查看應用主類的控制檯

切換到應用主類的控制檯,我們可以看到類似如下輸出,消費者對 hello隊列的監聽程序執行了,並輸出了接受到的消息信息。

四、使用模式

1、單生產者,多消費者(秒殺,搶紅包)

(1)配置

(2)生產者

(3)消費者

(4)controller

打印結果:

生產者發送了十條消息,分別被兩個消費者消費了

2、發佈訂閱

(1)配置類

(2)生產者

(3)消費者

(4)controller

(5)打印結果

由以上結果可知:就算fanoutSender發送消息的時候,指定了routing_key爲"abcd.ee",但是所有接收者都接受到了消息

3、topic

(1)配置類

(2)生產者

(3)消費者

(4)controller

(5)打印結果

由以上結果可知:sender1發送的消息,routing_key是“topic.message”,所以exchange裏面的綁定的binding_key是“topic.message”,topic.#都符合路由規則,所以sender1發送的消息,兩個隊列都能接收到;

sender2發送的消息,routing_key是“topic.messages”,所以exchange裏面的綁定的binding_key只有topic.#都符合路由規則;所以sender2發送的消息只有隊列topic.messages能收到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章