微服务消息总线Bus结合消息队列RabbitMQ实战

1、消息总线Bus介绍

当配置中心(如github)的配置更新之后,系统不能立即感知到,只有重启系统后才能拿到最新的配置,所以这个痛点需要解决——Bus;
消息:一个事件,需要广播或者单独传递给某个接口

2、消息队列和RabbitMQ

消息队列介绍(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/

3、使用Docker搭建RabbitMQ

拉取镜像:

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/

用户名密码默认都是guest
在这里插入图片描述

4、消息总线Bus结合config组件搭建配置中心项目架构图和操作流程

4.1、启动RabbitMQ

docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management

4.2、添加依赖

 <!--配置中心结合消息队列-->    
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

4.3、暴露端点

#暴露全部监控信息,properties的话,include后的*不用加引号
management:
  endpoints:
    web:
      exposure:
        include: "*"

4.4、在配置文件中增加关于RabbitMQ的连接(如果是本机,则可以直接启动,采用默认连接配置)

spring:
  application:
    name: product-service
  rabbitmq:
    host: localhost
    port: 5672
    username: guesst
    password: guest

4.5、在需要拿取最新配置的类上加注解

@RefreshScope

动态刷新配置: 在开发和测试环境使用,尽量少在生产环境使用
整体流程总结

当gitlab里的配置改变时,某一服务去拿到最新的配置,然后放在RabbitMQ里广播出去;

5、微服务相关项目改造配置中心

5.1、本地的每个服务(包括网关项目)项目配置文件只留这些信息

在这里插入图片描述
git里的配置
在这里插入图片描述
项目里加依赖

 <!--配置中心客户端-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-client</artifactId>
</dependency>

 <!--config server-->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

修改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

发布了46 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_33417321/article/details/89164747
今日推荐