spring boot config 集成rabbitmq实现总线bus实时刷新配置
spring boot config 集成rabbitmq实现总线bus实时刷新配置1. rabbitmq安装1.1 选择docker 镜像1.2 k8s 命名空间创建1.3 k8s 服务创建1.4 k8s daemonset 的 deployment1.5 验证2. spring boot config 集成2.1 创建项目2.2 配置2.3 远程配置2.4 启动2.5 修改远程配置2.6 po
spring boot config 集成rabbitmq实现总线bus实时刷新配置
git地址:
https://github.com/a18792721831/studySpringCloud.git
1. rabbitmq安装
1.1 选择docker 镜像
因为使用docker 进行启动rabbitmq,那么一个合适的镜像是我们的基础,如果选择的镜像不合适,那么就相当于大楼的地基错误。
看到这个是不是很兴奋,so easy!
但是千万不要用这个镜像,我们继续往下翻。
发现如果要使用rabbitmq的管理界面,那么需要使用集成了插件的镜像,而不是latest的镜像。
这个就比较坑,否则无法访问界面。
1.2 k8s 命名空间创建
rabbitmq-namespace.yaml
apiVersion : v1
kind : Namespace
metadata :
name : rabbitmq
labels :
app : rabbitmq
执行kubectl apply -f rabbitmq-namespace.yaml
验证
1.3 k8s 服务创建
创建k8s服务主要是统一对外开放,但是本次只是各个独立的rabbitmq,未统一化集群部署。
所以这部可有可无。
但是统一了服务,后续对rabbitmq集群化后,使用到rabbitmq的地方是不需要做任何修改的。
开放端口,需要开放两个端口(其余的我未开放)
5762:消费者,生产者的端口
15762:管理界面的端口。
注意,这里说的是rabbitmq默认的端口,也就是容器内的端口(可以自定义配置)
因为我们主要是学习,测试的rabbitmq,所以未做目录的挂载,意味着,当容器或者说pod重新启动或者调度后,rabbitmq所有的信息将会丢失(主要就是里面的路由和消息)
rabbitmq-service.yaml
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-service-node
namespace: rabbitmq
labels:
name: rabbitmq-service
spec:
selector:
rabbitmq: template
type: NodePort
ports:
- name: rabbitmq-service-15672
protocol: TCP
port: 15672
targetPort: 15672
nodePort: 31672
- name: rabbitmq-service-5672
protocol: TCP
port: 5672
targetPort: 5672
nodePort: 30672
端口映射关系:
容器内 | node | 对外 |
---|---|---|
5672 | 5672 | 30672 |
15672 | 15672 | 31672 |
1.4 k8s daemonset 的 deployment
因为k8s集群只有两个节点(穷),所以采集deamonset就行,保证node节点必须有一个。
rabbitmq-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: rabbitmq-deployment-daemonset
namespace: rabbitmq
labels:
rabbitmq: deployment-daemonset
spec:
#replicas: 2
selector:
matchLabels:
rabbitmq: template
#strategy:
updateStrategy:
rollingUpdate:
#maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
rabbitmq: template
spec:
#hostNetwork: true
containers:
- name: rabbitmq-pod
image: rabbitmq:3-management
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: 5672
initialDelaySeconds: 180
timeoutSeconds: 30
periodSeconds: 600
resources:
limits:
cpu: 4000m
memory: 4096Mi
requests:
cpu: 1000m
memory: 2048Mi
ports:
- name: rabbitmq-15672
containerPort: 15672
hostPort: 15672
protocol: TCP
- name: rabbitmq-5672
containerPort: 5672
hostPort: 5672
protocol: TCP
执行kubectl apply -f rabbitmq-daemonset.yaml
等待k8s调度,然后在节点上pull镜像。
可能需要镜像加速。
pull完后,就会启动。
1.5 验证
这个名字就是启动的pod的名字
2. spring boot config bus server 集成
2.1 创建项目
2.2 配置
application.yml
server:
port: 8011
logging:
level:
org:
springframework:
web:
servlet:
mvc:
method:
annotation:
RequestMappingHandlerMapping: trace
spring:
freemarker:
template-loader-path: classpath:/templates/
prefer-file-system-access: false
application:
name: config-eureka-server
# profiles:
# active: native
# cloud:
# config:
# server:
# native:
# search-locations: classpath:/portconfig/
profiles:
active: git
cloud:
config:
server:
git:
uri: https://github.com/a18792721831/studySpringCloud # 仓库跟地址
search-paths: springbootconfigserver/src/main/resources/portconfig # 以studySpringCloud为根路径进行搜索的文件夹地址
username: a18792721831 # 用户名
password: # 公有仓库可以不写密码
timeout: 60
label: master # 指定分支
rabbitmq:
host: 10.0.228.93
port: 30672
username: guest
password: guest
eureka:
client:
# register-with-eureka: false
# fetch-registry: false
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
management:
security:
enabled: false
endpoints:
web:
exposure:
include: '*'
这里有个坑:
management.endpoints.web.exposure.include必须配置,可以配置其他字符。
management.security.enabled=false表示rabbitmq访问时,不进行安全验证。
2.3 注解
2.4 远程配置
远程配置需要注释掉port配置,因为我们需要多实例启动。
2.5 启动
2.6 验证实时刷新
当springbootconfigbusserver启动后,使用postMan发送请求;
这里有个坑,好多书本上资料上写的是http://[ip]:[port]/bus/refresh
且是发送给client。
可能是旧版本支持吧。
或者旧版本资料上说请求http://[ip]:[port]/bus-refresh
新版本请求是http://[ip]:[port]/actuator/bus-refresh
日志如下
这是远程没有修改时刷新的日志。
接下来我们远程修改后,在次刷新。
刷新
有了,更新了一个文件。
2. spring boot config bus client 集成
2.1 创建项目
2.2 配置
这个配置文件是springbootconfigeurekaclient中拷贝即可。
management.security.enabled=false表示rabbitmq访问时,不进行安全验证。
2.4 启动
2.5 修改远程配置
2.6 post 刷新触发
config client从config server得到了配置。
而且实现了实时刷新,未重启服务,但是配置信息已经发生修改。
更多推荐
所有评论(0)