Spring Cloud Bus之RabbitMQ初窺

和Spring Cloud Config同樣,咱們接下來要聊的Spring Cloud Bus也是微服務架構系統中的必備組件。Spring Cloud Bus能夠將分佈式系統的節點與輕量級消息代理連接,而後能夠實現廣播狀態更改(例如配置更改)或廣播其餘管理指令。Spring Cloud Bus就像一個分佈式執行器,用於擴展的Spring Boot應用程序,但也能夠用做應用程序之間的通訊通道。那麼這裏就涉及到了消息代理,目前流行的消息代理中間件有很多,Spring Cloud Bus支持RabbitMQ和Kafka,本文咱們主要來看看RabbitMQ的基本使用。html


本文是Spring Cloud系列的第二十六篇文章,瞭解前二十五篇文章內容有助於更好的理解本文: web

1.使用Spring Cloud搭建服務註冊中心
2.使用Spring Cloud搭建高可用服務註冊中心
3.Spring Cloud中服務的發現與消費
4.Eureka中的核心概念
5.什麼是客戶端負載均衡
6.Spring RestTemplate中幾種常見的請求方式
7.RestTemplate的逆襲之路,從發送請求到負載均衡
8.Spring Cloud中負載均衡器概覽
9.Spring Cloud中的負載均衡策略
10.Spring Cloud中的斷路器Hystrix
11.Spring Cloud自定義Hystrix請求命令
12.Spring Cloud中Hystrix的服務降級與異常處理
13.Spring Cloud中Hystrix的請求緩存
14.Spring Cloud中Hystrix的請求合併
15.Spring Cloud中Hystrix儀表盤與Turbine集羣監控
16.Spring Cloud中聲明式服務調用Feign
17.Spring Cloud中Feign的繼承特性
18.Spring Cloud中Feign配置詳解
19.Spring Cloud中的API網關服務Zuul
20.Spring Cloud Zuul中路由配置細節
21.Spring Cloud Zuul中異常處理細節
22.分佈式配置中心Spring Cloud Config初窺
23.Spring Cloud Config服務端配置細節(一)
24.Spring Cloud Config服務端配置細節(二)之加密解密
25.Spring Cloud Config客戶端配置細節spring


RabbitMQ安裝配置

RabbitMQ是用Erlang語言編寫的,所以安裝RabbitMQ以前咱們要先安裝Erlang環境,首先去http://www.erlang.org/downloads地址下載erlang,下載到的是一個exe文件,直接雙擊安裝便可,而後去http://www.rabbitmq.com/downl...地址下載RabbitMQ,下載成功以後,也是一個exe,雙擊安裝便可(我在網上看到有人說安裝目錄不能有空格,我本身的軟件安裝目錄都是沒有空格的,因此沒去驗證這句話真假,小夥伴們注意下別掉坑裏了)。RabbitMQ安裝成功以後,默認會建立系統服務,將和Windows系統一塊兒啓動。因此安裝成功以後,打開系統服務,咱們若是看到以下結果表示安裝成功了: 瀏覽器

圖片描述

安裝成功以後,咱們可使用web來管理咱們的RabbitMQ,管理以前須要咱們先開啓web管理功能,開啓方式:進入到安裝目錄的sbin目錄下,而後執行 .rabbitmq-plugins enable rabbitmq_management命令,以下: 緩存

圖片描述

執行成功以後,打開瀏覽器,輸入http://localhost:15672進入到web管理頁面,須要先登陸,默認用戶名密碼都是guest,web管理頁面以下: 架構

圖片描述

這個管理頁面涉及到的信息面板比較多,咱們後面在用到的時候都會給小夥伴們一一介紹,好了,登陸成功以後,咱們能夠先嚐試建立一個用戶,建立用戶頁面以下: app

圖片描述

輸入用戶名密碼就能夠建立了,tags表示用戶標籤,至關於角色,可選值有management、none、policymaker、monitoring和administrator,不一樣取值所對應的權限區別以下:負載均衡

none

1.不能訪問 management plugin分佈式

management

用戶能夠經過AMQP作的任何事外加:spring-boot

1.列出本身能夠經過AMQP登入的virtual hosts
2.查看本身的virtual hosts中的queues, exchanges 和 bindings
3.查看和關閉本身的channels 和 connections
4.查看有關本身的virtual hosts的「全局」的統計信息,包含其餘用戶在這些virtual hosts中的活動

policymaker

management能夠作的任何事外加:

1.查看、建立和刪除本身的virtual hosts所屬的policies和parameters

monitoring

management能夠作的任何事外加:

1.列出全部virtual hosts,包括他們不能登陸的virtual hosts
2.查看其餘用戶的connections和channels
3.查看節點級別的數據如clustering和memory使用狀況
4.查看真正的關於全部virtual hosts的全局的統計信息

administrator

policymaker和monitoring能夠作的任何事外加:

1.建立和刪除virtual hosts
2.查看、建立和刪除users
3.查看建立和刪除permissions
4.關閉其餘用戶的connections

OK,我這裏就本身建立一個sang用戶一會使用(固然不建立也能夠,不建立就直接使用默認的guest用戶),sang用戶建立好以後,點擊用戶名,給用戶設置virtual hosts,不然一會使用這個用戶的時候會報錯。設置方式以下:

圖片描述

OK,配置完成後,接下來咱們來看一個Spring Boot和RabbitMQ整合的案例,來對RabbitMQ作進一步的瞭解。

簡單案例

整合案例是很是簡單的。

工程建立

首先咱們來建立一個普通的Spring Boot工程,而後添加以下依賴:

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

屬性配置

接下來在application.properties中配置RabbitMQ的鏈接信息,以下:

spring.application.name=rabbitmq-hello
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=sang
spring.rabbitmq.password=123456
server.port=2009

這裏咱們分別配置了RabbitMQ的地址爲localhost,端口爲5672(注意這裏沒寫錯,web管理端端口是15672),用戶名和密碼則是咱們剛剛建立出來的(也可使用默認的guest)。

建立消息生產者

發送消息咱們有一個現成的封裝好的對象AmqpTemplate,經過AmqpTemplate咱們能夠直接向某一個消息隊列發送消息,消息生產者的定義方式以下:

@Component
public class Sender {
    @Autowired
    private AmqpTemplate rabbitTemplate;
    public void send() {
        String msg = "hello rabbitmq:"+new Date();
        System.out.println("Sender:"+msg);
        this.rabbitTemplate.convertAndSend("hello", msg);
    }
}

注入AmqpTemplate,而後利用AmqpTemplate向一個名爲hello的消息隊列中發送消息。

建立消息消費者

@Component
@RabbitListener(queues = "hello")
public class Receiver {
    @RabbitHandler
    public void process(String msg) {
        System.out.println("Receiver:"+msg);
    }
}

@RabbitListener(queues = "hello")註解表示該消息消費者監聽hello這個消息隊列,@RabbitHandler註解則表示process方法是用來處理接收到的消息的,咱們這裏收到消息後直接打印便可。

配置消息隊列Bean

@Configuration
public class RabbitConfig {
    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }
}

建立一個名爲hello的消息隊列。

測試

建立單元測試類,用來發送消息,以下:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RabbitmqHelloApplication.class)
public class RabbitmqHelloApplicationTests {

    @Autowired
    private Sender sender;

    @Test
    public void contextLoads() {
        sender.send();
    }
}

上面全部的工做作完後,咱們就能夠啓動咱們的Spring Boot工程了,啓動成功後,咱們能夠在啓動日誌中看到以下內容:
圖片描述

這個表示程序已經建立了一個訪問RabbitMQ的鏈接,此時在RabbitMQ的web管理面板中,咱們也能夠看到鏈接信息,以下:

圖片描述
圖片描述
圖片描述

此時運行執行單元測試發送發送一條消息,咱們能夠在單元測試執行的控制檯看到以下日誌,表示消息已經發送出去了:

圖片描述

而後在程序運行的控制檯也能夠看到以下日誌,表示消息已經接收到了:

圖片描述

好了,RabbitMQ咱們就先介紹到這裏,有問題歡迎小夥伴們留言討論。

參考資料:

1.《Spring Cloud微服務實戰》

更多JavaEE資料請關注公衆號:

圖片描述

相關文章
相關標籤/搜索