| Java之 Spring Cloud 微服务搭建 Hystrix (第二个阶段)【二】【SpringBoot项目实现商品服务器端是调用】 | |
| Java之 Spring Cloud 微服务搭建Sentinel (第二个阶段)【三】【SpringBoot项目实现商品服务器端是调用】 | |
| Java之 Spring Cloud 微服务搭建网关 nginx,Zuul(第三个阶段)【一】【SpringBoot项目实现商品服务器端是调用】 | |
| Java之 Spring Cloud 微服务搭建网关SpringCloud Gateway微服务网关GateWay(第三个阶段)【二】【SpringBoot项目实现商品服务器端是调用】 | |
| Java之 Spring Cloud 微服务的链路追踪 Sleuth 和 Zipkin(第三个阶段)【三】【SpringBoot项目实现商品服务器端是调用】 | |
| Java之 Spring Cloud 微服务的 Spring Cloud Stream(第四个阶段)【一】【SpringBoot项目实现商品服务器端调用】 | |
| Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】 | |
| Java之 Spring Cloud 微服务的开源配置中心Apollo(第四个阶段)【三】【SpringBoot项目实现商品服务器端调用】 | |
Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】
-
一、 什么是配置中心
-
- 1、 配置中心概述
-
2、 常见配置中心
-
3、Spring Cloud Config简介
-
二、 Spring Cloud Config入门
-
- 1、 准备工作
-
- (1)项目准备
-
- 1)修改product_service
-
- (1)修改application.yml
-
(2)ProductController
-
(3)运行测试
-
(2)浏览器打开gitee.com,
-
- 1)注册用户 ,注册后登陆码云管理控制台
-
2)创建仓库
-
3)抽取配置文件
-
4)将上述配置文件上传到gitee
-
2、 搭建服务端程序
-
- (1)创建工程
-
(2)引入依赖
-
(3)编写启动类
-
(4)设置配置文件
-
(5)启动服务进行测试
-
3、修改客户端程序
-
- (1)修改product_service
-
- 1)引入依赖
-
2)删除application.yml
-
3)运行测试
-
4)修改配置文件然后在运行测试
-
4、手动刷新
-
- (1)问题解析
-
(2)引入依赖
-
(3)在`ProductController`类加上`@RefreshScope`
-
(4)配置文件`bootstrap.yml`中开发端点
-
(5)运行测试
-
(6)手动刷新发起POST请求,这里使用的工具是Insomnia
-
三、配置中心的高可用
-
- 1、 config_server改造
-
- (1)添加依赖
-
(2)配置文件
-
(3)运行测试
-
2、 对微服务进行改造
-
四、消息总线bus
-
- 1、消息总线bus概念介绍
-
2、消息总线整合配置中心
-
- (1)服务端引入依赖
-
(2)服务端添加配置
-
(3)微服务客户端引入依赖
-
(4)微服务客户端配置
-
- 1)bootstrap.yml 当中删除请求路径的端点的配置
-
2)需要在码云对应的配置文件中添加rabbitmq的配置信息
-
(5)运行测试
=====================================================================
对于传统的单体应用而言,常使用配置文件来管理所有配置,
比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。
微服务的配置管理一般有以下需求:
-
集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。
-
不同环境不同配置,比如数据源配置在不同环境(开发,生产,测试)中是不同的。
-
运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连接池大小等
-
配置修改后可自动更新。如配置内容发生变化,微服务可以自动更新配置
综上所述对于微服务架构而言,一套统一的,通用的管理配置机制是不可缺少的总要组成部分。常见的做法就是通过配置服务器进行管理。
Spring Cloud Config
为分布式系统中的外部配置提供服务器和客户端支持。
Apollo
(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
Disconf
专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」包括 百度、滴滴出行、银联、网易、拉勾网、苏宁易购、顺丰科技 等知名互联网公司正在使用!「disconf」在「2015 年度新增开源软件排名 TOP 100(OSC开源中国提供)」中排名第16强。
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。
它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。
使用Config Server,您可以为所有环境中的应用程序管理其外部属性。
它非常适合spring应用,也可以使用在其他语言的应用上。
随着应用程序通过从开发到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。
服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
Spring Cloud Config服务端特性:
-
HTTP,为外部配置提供基于资源的API(键值对,或者等价的YAML内容)
-
属性值的加密和解密(对称加密和非对称加密)
-
通过使用@EnableConfigServer在Spring boot应用中非常简单的嵌入。 Config客户端的特性(特指Spring应用)
-
绑定Config服务端,并使用远程的属性源初始化Spring环境。
-
属性值的加密和解密(对称加密和非对称加密)
===================================================================================
Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置文件内容,也可以使用SVN存储,或者是本地文件存储。
这里使用git作为学习的环境。
使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况。
如果我们希望体验Git飞一般的速度,可以使用国内的Git托管服务——码云(gitee.com)。
和GitHub相比,码云也提供免费的Git仓库。此外,还集成了代码质量检测、项目演示等功能。
对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务。
(1)项目准备
1)修改product_service
(1)修改application.yml
server:
port: 9001 #端口
spring:
application:
name: service-product #服务名称
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf8
username: root
password: root
jpa:
database: MySQL
show-sql: true
open-in-view: true
#配置Eureka
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka/
instance:
prefer-ip-address: true #使用ip地址注册
instance-id: s p r i n g . c l o u d . c l i e n t . i p − a d d r e s s : {spring.cloud.client.ip-address}: spring.cloud.client.ip−address:{server.port} #向组成中心注册服务ID
lease-renewal-interval-in-seconds: 5 #向注册中心中注册服务id
lease-expiration-duration-in-seconds: 10 #续约到期的时间
name: itbluebox
(2)ProductController
@RestController
@RequestMapping(“/product”)
public class ProductController {
@Autowired
private ProductService productService;
@Value(“${server.port}”)
private String port;
@Value(“${spring.cloud.client.ip-address}”)
private String ip;
@Value(value = “${name}”)
private String name;
@RequestMapping(value = “/{id}”, method = RequestMethod.GET)
public Product findById(@PathVariable Long id) {
Product product = productService.findByID(id);
product.setProductName(“访问的服务地址:”+ip+“:”+port);
return product;
}
@RequestMapping(value = “/test”)
public String test(){
return name;
}
}
(3)运行测试
(2)浏览器打开gitee.com,
1)注册用户 ,注册后登陆码云管理控制台
2)创建仓库
创建成功
3)抽取配置文件
文件命名规则:
-
{application}-{profile}.yml
-
{application}-{profile}.properties
-
application
为应用名称 profile指的开发环境(用于区分开发环境,测试环境、生产环境等)
将上述文件移动到电脑桌面并,对文件重新命名修改配置文件product-pro.yml
server:
port: 9002 #端口
spring:
application:
name: service-product #服务名称
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf8
username: root
password: root
jpa:
database: MySQL
show-sql: true
open-in-view: true
#配置Eureka
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka/
instance:
prefer-ip-address: true #使用ip地址注册
instance-id: s p r i n g . c l o u d . c l i e n t . i p − a d d r e s s : {spring.cloud.client.ip-address}: spring.cloud.client.ip−address:{server.port} #向组成中心注册服务ID
lease-renewal-interval-in-seconds: 5 #向注册中心中注册服务id
lease-expiration-duration-in-seconds: 10 #续约到期的时间
name: itbluebox-pro
将上述文件移动到电脑桌面并,创建新的配置文件product-dev.yml
server:
port: 9001 #端口
spring:
application:
name: service-product #服务名称
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf8
username: root
password: root
jpa:
database: MySQL
show-sql: true
open-in-view: true
#配置Eureka
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka/
instance:
prefer-ip-address: true #使用ip地址注册
instance-id: s p r i n g . c l o u d . c l i e n t . i p − a d d r e s s : {spring.cloud.client.ip-address}: spring.cloud.client.ip−address:{server.port} #向组成中心注册服务ID
lease-renewal-interval-in-seconds: 5 #向注册中心中注册服务id
lease-expiration-duration-in-seconds: 10 #续约到期的时间
name: itbluebox-dev
4)将上述配置文件上传到gitee
(1)创建工程
(2)引入依赖
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-config
(3)编写启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class,args);
}
}
- @EnableConfigServer : 通过此注解开启注册中心服务端功能
(4)设置配置文件
在这之前复制一下Git请求的服务器的地址
server:
port: 10001 #服务端口
spring:
application:
name: config-server #指定服务名
cloud:
config:
server:
git:
uri: https://gitee.com/itbluebox/config-repostory.git
(5)启动服务进行测试
运行成功
访问测试:http://localhost:10001/product-dev.yml
(1)修改product_service
1)引入依赖
org.springframework.cloud
spring-cloud-starter-config
2)删除application.yml
springboot的应用配置文件,需要通过Config-server获取,这里不再需要。
spring:
cloud:
config:
name: product #应用名称需要对应Git中配置文件的名称的前半部分
profile: dev #开发环境
label: master #git当中的分支
uri: http://localhost:10001 #config-server的请求地址
3)运行测试
访问:http://localhost:9001/product/1
访问:http://localhost:9001/product/test
4)修改配置文件然后在运行测试
将dev修改为pro
spring:
cloud:
config:
name: product #应用名称需要对应Git中配置文件的名称的前半部分
profile: pro #开发环境
label: master #git当中的分支
uri: http://localhost:10001 #config-server的请求地址
重新启动运行
请求的端口改变了
访问:http://localhost:9002/product/1
(1)问题解析
我们已经在客户端取到了配置中心的值,
修改Gitee上的值
修改内容
访问:http://localhost:9002/product/test
但当我们修改Gitee上面的值时,
服务端(Config Server)能实时获取最新的值,但客户端(Config Client)读的是缓存,无法实时获取最新值。
SpringCloud已经为我们解决了这个问题,那就是客户端使用post去触发refresh,获取最新数据,需要依赖spring-boot-starter-actuator
(2)引入依赖
org.springframework.boot
spring-boot-starter-actuator
(3)在ProductController
类加上@RefreshScope
@RestController
@RequestMapping(“/product”)
@RefreshScope //代表的是开启动态刷新
public class ProductController {
@Autowired
private ProductService productService;
@Value(“${server.port}”)
private String port;
@Value(“${spring.cloud.client.ip-address}”)
private String ip;
@Value(value = “${name}”)
private String name;
@RequestMapping(value = “/{id}”, method = RequestMethod.GET)
public Product findById(@PathVariable Long id) {
Product product = productService.findByID(id);
product.setProductName(“访问的服务地址:”+ip+“:”+port);
return product;
}
@RequestMapping(value = “/test”)
public String test(){
return name;
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-IAixkLFT-1712164669850)]
[外链图片转存中…(img-yUbHC1t1-1712164669851)]
[外链图片转存中…(img-WpwCAos9-1712164669851)]
[外链图片转存中…(img-VXZ0NfVh-1712164669851)]
[外链图片转存中…(img-uXkAHSUd-1712164669852)]
[外链图片转存中…(img-2L6MH39J-1712164669852)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-WDOgnnjt-1712164669852)]
[外链图片转存中…(img-phCWdCvY-1712164669853)]
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
[外链图片转存中…(img-bNlgA8ht-1712164669853)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算