以 Ubuntu20 为例
sudo apt-get update -y
sudo apt-get install curl gnupg -y
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get install apt-transport-https
deb https://dl.bintray.com/rabbitmq-erlang/debian focal erlang-23.x
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文件并输入以下内容
Package: erlang*
Pin: release o=Bintray
Pin-Priority: 1000
3、 执行以下命令
sudo apt-cache policy
4、 在/etc/apt/preferences.d目录下的erlang文件中更改成以下内容(这里erlang选择23.0.3-1版本)
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文件,并添加以下内容
Package: rabbitmq-server
Pin: version 1:3.8.7
Pin-Priority: 1000
## Update package indices
sudo apt-get update -y
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
# 启动管理界面和外部监控系统
sudo rabbitmq-plugins enable rabbitmq_management
# 启动RabbitMQ
sudo service rabbitmq-server start
User can only log in via localhost
添加admin,并赋予administrator权限
添加admin用户,密码设置为admin。
sudo rabbitmqctl add_user admin admin
赋予权限
sudo rabbitmqctl set_user_tags admin administrator
赋予virtual host中所有资源的配置、写、读权限以便管理其中的资源
sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
访问服务器,使用 admin/admin 登陆
1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
2、利用消息总线触发一个服务端ConfigServer的/bus/refresh断电,而刷新所有客户端的配置
这里我们选择第二种,更符合我们的要求,原因如下:
演示广播效果,增加复杂度,再以3355为模板制作一个3366
新增 serverPort 区分端口号
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 + "\t\n\n" + "configInfo: " + configInfo;
}
}
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
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'
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
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: "*"
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
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: "*"
访问:http://config3344.com:3344/master/config-dev.yml
访问:http://localhost:3355/client/configInfo
访问:http://localhost:3366/client/configInfo
目前所有服务正常,尝试改变Gitee上面的配置文件
目的:一处修改,处处生效
此时,主要输入下面命令,即可达到目的
curl -X POST "http://localhost:3344/actuator/bus-refresh"
不用重启项目或者刷新指定端口即可处处刷新
不想全部通知,只想定点通知。指定具体某一个实例生效而不是全部。 公式:
http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
/bus/refresh
请求不再发送具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例
只通知3355,不 通知3366
## config-client:3355 相当于 服务名称:端口号
curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355"
刷新 3355,已经发生改变
刷新 3366,没有发生改变