Spring Cloud Bus之RabbitMQ初窺 ( 16 )

轉自 https://blog.csdn.net/u012702547/article/details/77823434

這個系列我感覺真的太好了,可以一步一步的瞭解spring cloud 的搭建以及更深層次的東西,對想學這門技術的朋友真的入門特別的快,感謝這位大哥的分享,我也會持續的更新過來。

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


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

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客戶端配置細節


RabbitMQ安裝配置

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

這裏寫圖片描述

安裝成功之後,我們可以使用web來管理我們的RabbitMQ,管理之前需要我們先開啓web管理功能,開啓方式:進入到安裝目錄的sbin目錄下,然後執行 .\rabbitmq-plugins enable rabbitmq_management命令,如下:

這裏寫圖片描述

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

這裏寫圖片描述

這個管理頁面涉及到的信息面板比較多,我們後面在用到的時候都會給小夥伴們一一介紹,好了,登錄成功之後,我們可以先嚐試創建一個用戶,創建用戶頁面如下:

這裏寫圖片描述

輸入用戶名密碼就可以創建了,tags表示用戶標籤,相當於角色,可選值有management、none、policymaker、monitoring和administrator,不同取值所對應的權限區別如下:

none

1.不能訪問 management plugin

management

用戶可以通過AMQP做的任何事外加:

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我們就先介紹到這裏,有問題歡迎小夥伴們留言討論。

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