当配置中心(如github)的配置更新之后,系统不能立即感知到,只有重启系统后才能拿到最新的配置,所以这个痛点需要解决——Bus;
消息:一个事件,需要广播或者单独传递给某个接口
消息队列介绍(SpringCloud默认使用RabbitMQ)
https://www.cnblogs.com/linjiqin/p/5720865.html
消息队列总的思路:A服务调B服务,发现调B服务的其他服务有很多,那就把调B服务的这些服务放消息队列里,一个一个来调用B;
RabbitMQ官方文档
官方文档:http://www.rabbitmq.com/getstarted.html
中文文档:http://rabbitmq.mr-ping.com/
拉取镜像:
docker pull rabbitmq:management
查看当前镜像列表
docker images
删除指定镜像:
docker rmi IMAGE_ID (如果需要强制删除加 -f)
创建容器
docker run -d --name="myrabbitmq" -p 5671:5671 -p 15672:15672 rabbitmq:management
# 查看启动的容器
docker ps
参数讲解:
run: 创建一个新的容器并运行一个命令
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
--name="rabbitmq": 为容器指定一个名称
直接访问:
http://192.168.237.130:15672/
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-bus-amqp
#暴露全部监控信息,properties的话,include后的*不用加引号
management:
endpoints:
web:
exposure:
include: "*"
spring:
application:
name: product-service
rabbitmq:
host: localhost
port: 5672
username: guesst
password: guest
@RefreshScope
动态刷新配置: 在开发和测试环境使用,尽量少在生产环境使用
整体流程总结
当gitlab里的配置改变时,某一服务去拿到最新的配置,然后放在RabbitMQ里广播出去;
org.springframework.cloud
spring-cloud-config-client
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-bus-amqp
修改application.properties为bootstrap.yml 并拷贝配置文件,并加入如下配置
#指定注册中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#服务的名称
spring:
application:
name: order-service
#指定从哪个配置中心读取
cloud:
config:
discovery:
service-id: CONFIG-SERVER
enabled: true
profile: test
各个项目启动顺序
1.注册中心
2. 配置中心
3. 对应的服务:商品服务、订单服务。。。
4. 启动网关
什么时候使用MQ