RabbitMQ 安装过程
以 Ubuntu20 为例
参考文章
安装前准备
代码语言:javascript复制sudo apt-get update -y
sudo apt-get install curl gnupg -y
安装RabbitMQ签名密钥
代码语言:javascript复制curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
安装apt HTTPS传输
代码语言:javascript复制sudo apt-get install apt-transport-https
添加提供最新的RabbitMQ和Erlang版本的Bintray存储库
- 在/etc/apt/sources.list.d目录下创建bintray.erlang.list文件
- 在文件中输入以下内容(这里以Ubuntu20.04, Erlang版本为23.x为例子)
deb https://dl.bintray.com/rabbitmq-erlang/debian focal erlang-23.x
安装Erlang包
代码语言:javascript复制sudo apt-get update -y
sudo apt-get install -y erlang-base
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key
erlang-runtime-tools erlang-snmp erlang-ssl
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
指定有效程序包
1、执行sudo apt-get update -y
命令
2、 在/etc/apt/preferences.d目录下新建erlang文件并输入以下内容
代码语言:javascript复制Package: erlang*
Pin: release o=Bintray
Pin-Priority: 1000
3、 执行以下命令
代码语言:javascript复制sudo apt-cache policy
4、 在/etc/apt/preferences.d目录下的erlang文件中更改成以下内容(这里erlang选择23.0.3-1版本)
代码语言:javascript复制Package: erlang*
Pin: version 1:23.0.3-1
Pin-Priority: 1000
Package: esl-erlang
Pin: version 1:22.3.4.1
Pin-Priority: 1000
5、 在/etc/apt/preferences.d/目录下篡改剪rabbitmq文件,并添加以下内容
代码语言:javascript复制Package: rabbitmq-server
Pin: version 1:3.8.7
Pin-Priority: 1000
安装RabbitMQ
代码语言:javascript复制## Update package indices
sudo apt-get update -y
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
验证RabbitMQ安装
代码语言:javascript复制# 启动管理界面和外部监控系统
sudo rabbitmq-plugins enable rabbitmq_management
# 启动RabbitMQ
sudo service rabbitmq-server start
访问页面查看效果
访问地址:http://127.0.0.1:15672
User can only log in via localhost
添加账号并赋予权限
添加admin,并赋予administrator权限
添加admin用户,密码设置为admin。
代码语言:javascript复制sudo rabbitmqctl add_user admin admin
赋予权限
代码语言:javascript复制sudo rabbitmqctl set_user_tags admin administrator
赋予virtual host中所有资源的配置、写、读权限以便管理其中的资源
代码语言:javascript复制sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
访问服务器,使用 admin/admin 登陆
SpringCloud Bus动态刷新全局广播
设计思想
1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
2、利用消息总线触发一个服务端ConfigServer的/bus/refresh断电,而刷新所有客户端的配置
这里我们选择第二种,更符合我们的要求,原因如下:
- 打破了微服务的职责单一性,因为微服务本身是业务模块,它不应该承担配置刷新的职责
- 破坏了微服务各节点的对等性
- 有一定的局限性,例如微服务在迁移时,它的网络地址常发生变化,如果想做到自动刷新,那就会增加更多的修改
cloud-config-client3366 复制并修改
演示广播效果,增加复杂度,再以3355为模板制作一个3366
controller
新增 serverPort 区分端口号
代码语言:javascript复制package com.ray.cloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description:
* @Author Administrator
* @Date 2020/10/18 15:35
* @Version 1.0
*/
@RestController
@RequestMapping("/client")
@RefreshScope // 具备刷新能力
public class ConfigClientController {
@Value("${server.port}")
private String serverPort;
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return "serverPort: " serverPort "tnn" "configInfo: " configInfo;
}
}
cloud-config-center3344配置中心服务端添加消息总线支持
pom
代码语言:javascript复制<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
yml
代码语言:javascript复制server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
# Gitee上的git仓库名字
# uri: https://gitee.com/qq343509740/spring-cloud_h_2020.git # 不公开
uri: https://gitee.com/qq343509740/spring-cloud_-h_2020_config.git # 公开
# 如果是不公开的项目,需要配置如下三项
# force-pull: true
# username: xxxx@qq.com
# password: xxxx
##搜索目录.这个目录指的是Gitee上的目录
search-paths:
# - config-repo # 不公开
- spring-cloud_-h_2020_config # 公开
##读取分支
label: master
# rabbitMQ 相关配置 (新增)
rabbitmq:
host: 192.168.116.128
port: 5672
username: admin
password: admin
# 服务注册到 eureka 地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
# rabbitMQ 相关配置,暴露 bus 刷新配置的端点 (新增)
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
cloud-config-center3355客户端添加消息总线支持
pom
代码语言:javascript复制<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
yml
代码语言:javascript复制server:
port: 3355
spring:
application:
name: cloud-config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344
# rabbitMQ 相关配置
rabbitmq:
host: 192.168.116.128
port: 5672
username: admin
password: admin
# 服务注册到 eureka 地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
cloud-config-center3366客户端添加消息总线支持
pom
代码语言:javascript复制<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
yml
代码语言:javascript复制server:
port: 3366
spring:
application:
name: cloud-config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344
# rabbitMQ 相关配置
rabbitmq:
host: 192.168.116.128
port: 5672
username: admin
password: admin
# 服务注册到 eureka 地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
测试1
访问:http://localhost:7001/
访问:http://config3344.com:3344/master/config-dev.yml
访问:http://localhost:3355/client/configInfo
访问:http://localhost:3366/client/configInfo
目前所有服务正常,尝试改变Gitee上面的配置文件
测试2
目的:一处修改,处处生效
此时,主要输入下面命令,即可达到目的
代码语言:javascript复制curl -X POST "http://localhost:3344/actuator/bus-refresh"
不用重启项目或者刷新指定端口即可处处刷新
SpringCloud Bus动态刷新定点通知
不想全部通知,只想定点通知。指定具体某一个实例生效而不是全部。 公式:
http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
/bus/refresh
请求不再发送具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例
测试
只通知3355,不 通知3366
代码语言:javascript复制## config-client:3355 相当于 服务名称:端口号
curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355"
刷新 3355,已经发生改变
刷新 3366,没有发生改变