rabbitmq java,Spring Cloud Bus之RabbitMQ初窺

 2023-10-05 阅读 29 评论 0

摘要:和Spring Cloud Config一樣,我們接下來要聊的Spring Cloud Bus也是微服務架構系統中的必備組件。Spring Cloud Bus可以將分布式系統的節點與輕量級消息代理鏈接,然后可以實現廣播狀態更改(例如配置更改)或廣播其他管理指令。Spring Cloud Bus就像

和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/downl...地址下載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 {@Autowiredprivate 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 {@RabbitHandlerpublic void process(String msg) {System.out.println("Receiver:"+msg);}
}

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

配置消息隊列Bean

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

創建一個名為hello的消息隊列。

測試

創建單元測試類,用來發送消息,如下:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RabbitmqHelloApplication.class)
public class RabbitmqHelloApplicationTests {@Autowiredprivate Sender sender;@Testpublic void contextLoads() {sender.send();}
}

上面所有的工作做完后,我們就可以啟動我們的Spring Boot工程了,啟動成功后,我們可以在啟動日志中看到如下內容:
圖片描述

這個表示程序已經創建了一個訪問RabbitMQ的連接,此時在RabbitMQ的web管理面板中,我們也可以看到連接信息,如下:

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

此時運行執行單元測試發送發送一條消息,我們可以在單元測試執行的控制臺看到如下日志,表示消息已經發送出去了:

圖片描述

然后在程序運行的控制臺也可以看到如下日志,表示消息已經接收到了:

圖片描述

好了,RabbitMQ我們就先介紹到這里,有問題歡迎小伙伴們留言討論。

參考資料:

1.《Spring Cloud微服務實戰》

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

圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/117989.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息