作者:泽宇的精彩人生 | 来源:互联网 | 2023-08-24 18:58
消息总线
总线是计算机各种功能部件之间传送信息的公共通信干线。消息总线(Message Queue,MQ),便是消息子各服务之间传输消息的通信干线,是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。
由于我的系统上,暂时只安装了RabbitMQ,所以本项目以RabbitMQ作为演示。实际应用中,ActiveMQ,Kafka等消息队列,都是可以使用的。
修改Config-Client项目
在之前的Config-Client原有的项目基础上,增加如下依赖:
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-bus-amqpartifactId>
dependency>
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-aopartifactId>
dependency>
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-actuatorartifactId>
dependency>
再修改bootstrap.properties文件&#xff0c;Spring Boot的目的就是为了简化一切配置&#xff0c;所以&#xff0c;将原来的application.properties中的内容&#xff0c;拷贝到bootstrap.properties中&#xff0c;再将application.properties文件删除&#xff0c;在bootstrap.properties中添加rabbitMQ相关配置。下面的配置是针对SpringBoot2.0以上版本的&#xff0c;如果是低版本的&#xff0c;可以不写management.endpoints.web.exposure.include&#61;*
&#xff1a;
server.port&#61;9007
spring.application.name&#61;config-clientspring.cloud.config.label&#61;master
spring.cloud.config.profile&#61;user
spring.cloud.config.discovery.enabled&#61;true
spring.cloud.config.discovery.serviceId&#61;config-server
eureka.client.service-url.defaultZone&#61;http://localhost:9000/eureka/spring.rabbitmq.host&#61;127.0.0.1
spring.rabbitmq.port&#61;5672
spring.rabbitmq.virtual-host&#61;/CMW
spring.rabbitmq.username&#61;cmw
spring.rabbitmq.password&#61;cmw96920123
management.endpoints.web.exposure.include&#61;*
再在带有&#64;Value远程读取的类上面&#xff0c;添加&#64;RefreshScope注释。
&#64;SpringBootApplication
&#64;RestController
&#64;RefreshScope
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}&#64;Value("${username}")String username;&#64;Value("${password}")String password;&#64;RequestMapping(value &#61; "/user")public String user(){return "您好&#xff0c;您用户名为&#xff1a;"&#43;username&#43;",密码为&#xff1a;"&#43;password;}
}
致此&#xff0c;Config_Client项目就修改完成了。
修改Config-Server项目
在Config-Server项目的pom.xml文件中&#xff0c;添加eureka-client依赖。
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
在application.properties文件中&#xff0c;添加eureka的client地址。
eureka.client.service-url.defaultZone&#61;http://localhost:9000/eureka/
再在项目启动类上&#xff0c;增加&#64;EnableEurekaClient注解。
&#64;SpringBootApplication
&#64;EnableConfigServer
&#64;EnableEurekaClient
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
致此&#xff0c;对项目的修改基本完成。
运行项目
访问Config-Client中配置的页面&#xff1a;http://localhost:9007/user 出现&#xff1a;
您好&#xff0c;您用户名为&#xff1a;ChengMingWei,密码为&#xff1a;SpringCloud
再进入GitHub修改application-user.properties文件&#xff0c;修改完成后。当我们未执行消息刷新命令时&#xff0c;重新加载http://localhost:9007/user时&#xff0c;显示的仍然是尚未更新的配置。
您好&#xff0c;您用户名为&#xff1a;ChengMingWei,密码为&#xff1a;SpringCloud
在浏览器输入刷新配置文件命令http://localhost:9007/actuator/refresh&#xff08;在低版本中&#xff0c;使用http://localhost:9007/bus/refresh&#xff09; &#xff0c;当在浏览器中&#xff0c;访问此链接时&#xff0c;默认的请求方式为GET&#xff0c;请求会出现405的错误&#xff0c;但是此处是需要以POST方式进行请求的&#xff0c;我们可以使用第三方软件&#xff0c;如Postman&#xff08;链接: 百度网盘下载 密码: yy4s&#xff09;之类的做模拟请求&#xff0c;也可以在如火狐浏览器之类的浏览器中&#xff0c;下载poster插件&#xff0c;进行POST请求。
以POST方式请求后&#xff0c;浏览器中会出现如下信息&#xff0c;标识修改更新了哪些字段&#xff1a;
[
“config.client.version”,
“password”,
“username”
]
接下来&#xff0c;我们再去刷新http://localhost:9007/user&#xff0c;出现&#xff1a;
您好&#xff0c;您用户名为&#xff1a;CMW,密码为&#xff1a;Hello!SpringCloud
已经是修改后的内容了。原本不用消息总线的方式&#xff0c;是在项目启动时&#xff0c;将所有配置文件读取下来&#xff0c;但当配置文件更新时&#xff0c;项目不会同步更新&#xff0c;只有重新运行项目&#xff0c;才会启动。而使用了消息总线的项目&#xff0c;在执行刷新命令后&#xff0c;会重新读取配置&#xff0c;将同步显示新的配置。
相关工具下载
使用RabbitMQ&#xff0c;还需要下载Erlang。
RabbitMQ : http://www.rabbitmq.com/ (官网)
Erlang&#xff1a;http://www.erlang.org/ &#xff08;官网&#xff09;
Postman&#xff1a;https://www.getpostman.com/&#xff08;官网&#xff09;
以上文件我都传到百度云了&#xff1a; https://pan.baidu.com/s/1bjcS9bOEzOv2o8GwIAOLbQ 密码: mq9g &#xff08;百度云&#xff09;