首页 > 其他分享 >微服务Spring Cloud17_Spring Cloud Bus服务总线12

微服务Spring Cloud17_Spring Cloud Bus服务总线12

时间:2024-05-13 17:34:31浏览次数:21  
标签:12 服务 service Spring 配置 server Cloud17 user

一、问题

 前面已经完成了将微服务中的配置文件集中存储在远程Git仓库,并且通过配置中心微服务从Git仓库拉取配置文件, 当用户微服务启动时会连接配置中心获取配置信息从而启动用户微服务。

 如果我们更新Git仓库中的配置文件,那用户微服务是否可以及时接收到新的配置信息并更新呢?

 1、修改远程Git配置 修改在码云上的user-dev.yml文件,添加一个属性test.name。

  

 2、修改UserController

  修改 user-service 工程中的处理器类;

  user-service\src\main\java\com\itheima\user\controller\UserController.java 如下:

package com.itheima.user.controller;
import com.itheima.user.pojo.User;
import com.itheima.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Value("${test.name}")
    private String name;
    @GetMapping("/{id}")
    public User queryById(@PathVariable Long id){
        System.out.println("配置文件中的test.name = " + name);
        return userService.queryById(id);
   }
}

 3、测试

  依次启动注册中心 eureka-server 、配置中心 config-server 、用户服务 user-service ,访问http://localhost:9091/user/8;

  然后修改Git仓库中的配置信息,访问用户微服务,查看输出内容。  

  结论:通过查看用户微服务控制台的输出结果可以发现,我们对于Git仓库中配置文件的修改并没有及时更新到用户微服务,只有重启用户微服务user-service才能生效。

 如果想在不重启微服务的情况下更新配置该如何实现呢? 可以使用Spring Cloud Bus来实现配置的自动更新。  

需要注意的是Spring Cloud Bus底层是基于RabbitMQ实现的,默认使用本地的消息队列服务,所以需要提前启动本地RabbitMQ服务(安装RabbitMQ以后才有),如下:

  

二、Spring Cloud Bus简介

 Spring Cloud Bus是用轻量的消息代理将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管 理。也就是消息总线可以为微服务做监控,也可以实现应用程序之间相互通信。 Spring Cloud Bus可选的消息代理 有RabbitMQ和Kafka。     

 使用了Bus之后:

  

三、改造配置中心

 1、在 config-server 项目的pom.xml文件中加入Spring Cloud Bus相关依赖 

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

 2、在 config-server 项目修改application.yml文件如下:

server:
 port: 12000
spring:
 application:
   name: config-server
 cloud:
   config:
     server:
       git:
         uri: https://gitee.com/liaojianbin/heima-config.git
  # rabbitmq的配置信息;如下配置的rabbit都是默认值,其实可以完全不配置
 rabbitmq:
   host: localhost
   port: 5672
   username: guest
   password: guest
eureka:
 client:
   service-url:
     defaultZone: http://127.0.0.1:10086/eureka
management:
 endpoints:
   web:
     exposure:
        # 暴露触发消息总线的地址
       include: bus-refresh

四、改造用户服务

 1、在用户微服务 user-service 项目的pom.xml中加入Spring Cloud Bus相关依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 2、修改 user-service 项目的bootstrap.yml如下:

spring:
 cloud:
   config:
      # 与远程仓库中的配置文件的application保持一致
     name: user
      # 远程仓库中的配置文件的profile保持一致
     profile: dev
      # 远程仓库中的版本保持一致
     label: master
     discovery:
        # 使用配置中心
       enabled: true
        # 配置中心服务id
       service-id: config-server
  # rabbitmq的配置信息;如下配置的rabbit都是默认值,其实可以完全不配置
 rabbitmq:
   host: localhost
   port: 5672
   username: guest
   password: guest
eureka:
 client:
   service-url:
     defaultZone: http://127.0.0.1:10086/eureka

 3、 改造用户微服务 user-service 项目的UserController 

  

五、测试

 前面已经完成了配置中心微服务和用户微服务的改造,下面来测试一下,当我们修改了Git仓库中的配置文件,用户 微服务是否能够在不重启的情况下自动更新配置信息。

 测试步骤:

  第一步:依次启动注册中心 eureka-server 、配置中心 config-server 、用户服务 user-service

  第二步:访问用户微服务http://localhost:9091/user/8;查看IDEA控制台输出结果 

  第三步:修改Git仓库中配置文件 user-dev.yml 的 test.name 内容

  第四步:使用Postman或者RESTClient工具发送POST方式请求访问地址http://127.0.0.1:12000/actuator/bus-refre sh 

   

  第五步:访问用户微服务系统控制台查看输出结果  

  说明:

   1、Postman或者RESTClient是一个可以模拟浏览器发送各种请求(POST、GET、PUT、DELETE等)的工具

   2、请求地址http://127.0.0.1:12000/actuator/bus-refresh中 /actuator是固定的,/bus-refresh对应的是配置 中心config-server中的application.yml文件的配置项include的内容

   3、请求http://127.0.0.1:12000/actuator/bus-refresh地址的作用是访问配置中心的消息总线服务,消息总线 服务接收到请求后会向消息队列中发送消息,各个微服务会监听消息队列。当微服务
接收到队列中的消息后, 会重新从配置中心获取最新的配置信息。

六、Spring Cloud 体系技术综合应用概览

  

 

标签:12,服务,service,Spring,配置,server,Cloud17,user
From: https://www.cnblogs.com/ajing2018/p/18189644

相关文章

  • 创建启动springboot项目的一些问题,如spring-boot-autoconfigure 自动加载注入配置
    1.springboot项目启动是否只需要3下面3个jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.b......
  • 1250 - Table 'd' from one of the SELECTs cannot be used in field list
    1问题描述sql数据库查询接口union后orderby某字段,提示错误“1250-Table'd'fromoneoftheSELECTscannotbeusedinfieldlist“。移除orderby条件,就不会报错,但是不满足按照某个字段排序。 2方案解决修改排序条件为:orderbystatId即可。(union后的结果是字段......
  • 微服务Spring Cloud17_Spring Cloud Config分布式配置中心11
    一、简介在分布式系统中,由于服务数量非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在SpringCloud中,提供了SpringCloudConfig,它支持配置文件放在配置服务的本地,也支持放在远程Git仓库(GitHub、码云)。使用SpringCl......
  • 带日期的整合(5.12)
    决定整合一下堆一块太乱了之前的就不搬了以后写了放在这里看的人少的好处就是可以更新发布时间就像粉丝少的主播更容易看到你的留言一样hhh5.75.115.125.13......
  • spring整合mybatis
    整合步骤:首先将mybatis-config.xml环境的配置:数据源、驱动、url、username、password…这些基础配置移交给Spring的核心配置文件application.xml文件中!创建bean对象dataSource顶替Resource。再通过dataSource对象,创建bean对象SqlSessionFactory,这时候SqlSessionFactory工......
  • HydroOJ 从入门到入土(19)导入题解和标程、题目数据统计(>=4.12.0)
    题解和std可以导入了,导出还会远吗?目录一、导入题解和标程1.目录结构2.测试结果3.第二次测试题目结构如下:测试结果:4.总结:关于题解:关于标程(std):去除.DS_Store的解决方法二、题目数据统计1.范围2.筛选选项3.无关紧要的小bug一、导入题解和标程新版本更新了这个功能,方......
  • spring之AOP(面向切面编程)
    什么是AOP?AOP(AspectOrientedProgramming)意为:面向切面编程,体现了横切的思想,意思是在添加某项功能的时候,是以切面插入的方式实现的,对原有的代码不会产生改变。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP在spring中的作用:在不改变原有代码的情况......
  • 采用双dsPIC DSC内核配置,DSPIC33CH128MP208-E/PT DSPIC33CH128MP208-I/PT DSPIC33CH12
    dsPIC33CH系列数字信号控制器简介dsPIC33CH系列控制器采用单芯片、双dsPICDSC内核配置,将为设计高端嵌入式控制应用的系统开发人员带来福音。根据设计,dsPIC33CH的两个内核一个是主核,一个是副核。副核用于执行时间关键型专用控制代码,主核负责运行用户接口、系统监控和通信功能,专为......
  • 微服务Spring Cloud17_Spring Cloud Gateway网关10
    一、简介SpringCloudGateway是Spring官网基于Spring5.0、SpringBoot2.0、ProjectReactor等技术开发的网关服务。SpringCloudGateway基于Filter链提供网关基本功能:安全、监控/埋点、限流等。SpringCloudGateway为微服务架构提供简单、有效且统一的API路由管理方式......
  • C120 树剖+李超树 P4069 [SDOI2016] 游戏
    视频链接:C120树剖+李超树P4069[SDOI2016]游戏_哔哩哔哩_bilibili    D12LuoguP3384【模板】轻重链剖分/树链剖分-董晓-博客园(cnblogs.com) LuoguP4069[SDOI2016]游戏//树剖+李超树O(nlognlognlogn)#include<iostream>#include<cstring>#in......