Spring Cloud整合nacos使用
一、启动配置管理(自动加载配置)
1.添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2021.0.1.0</version></dependency><!--2020.0.0 版本不在默认加载bootstrap 文件,需引入一下依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.1.7</version></dependency>
2.增加bootstrap.yml配置
spring:application:# 应用名称name: service-provider
profiles:# 环境配置active: dev
cloud:nacos:config:# 配置中心地址server-addr: 127.0.0.1:8848# 配置文件格式file-extension: yml
# 共享配置shared-configs:-dataId: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}refresh:true#经修正 不加这个无法热更新共享配置
注:在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
1.prefix 默认为
spring.application.name
的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
2.spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
${prefix}.${file-extension}
3.file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
3.使用
@RefreshScope
注解实现配置自动更新
@Data@Component@RefreshScopepublicclassProperties{@Value("${testName}")publicString name;}
4.在nacos配置管理中新增dataId与上面一致的配置
二、启动服务发现
1.服务提供者
(1)添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.1.0</version></dependency>
(2)application.yml中增加配置
server:port:88spring:application:# 应用名称name: service-provider
cloud:nacos:discovery:# 服务注册地址server-addr: 127.0.0.1:8848
(3)在启动类添加
@EnableDiscoveryClient
注解开启服务注册发现功能
(4)controller方法
@RestControllerpublicclassTestController{@RequestMapping("/echo/{string}")publicStringecho(@PathVariableString string){return"Hello Nacos Discovery "+ string;}}
2.服务消费者
(1)添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.1.0</version></dependency><!-- 2020.0.0 版本去除了 Ribbon,需手动引入loadbalancer,解决nacos消费者服务访问提供者服务时报错java.net.UnknownHostException--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.1.1</version></dependency>
(2)application.yml中增加配置
server:port:8080spring:application:# 应用名称name: service-consumer
cloud:nacos:discovery:# 服务注册地址server-addr: 127.0.0.1:8848
(3)启动类
添加
@EnableDiscoveryClient
注解开启服务注册发现功能,并给 RestTemplate 实例添加 @LoadBalanced 注解
@SpringBootApplication@EnableDiscoveryClientpublicclassNacosConsumerApplication{@LoadBalanced@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}publicstaticvoidmain(String[] args){SpringApplication.run(NacosConsumerApplication.class, args);}}
(4)controller方法
@RestControllerpublicclassTestController{privatefinalRestTemplate restTemplate;@AutowiredpublicTestController(RestTemplate restTemplate){this.restTemplate = restTemplate;}@RequestMapping(value ="/echo/{str}", method =RequestMethod.GET)publicStringecho(@PathVariableString str){return restTemplate.getForObject("http://service-provider/echo/"+ str,String.class);}}
(5)访问http://localhost:8080/echo/2018
(6)nacos服务管理
三、新版本application.yml设置配置中心及服务发现
spring:application:# 应用名称name: service-consumer
cloud:nacos:#nacos地址serverAddr: 127.0.0.1:8848config:import:#nacos配置中心的dataId(可以不用带后缀名)- nacos:${spring.application.name}
四、拓展配置
五、openFeign
注:openFeign可以将提供者提供的RESTful服务伪装为接口进行消费,消费者只需使用“feign接口+注解”的形式即可直接调用提供者提供的RESTful服务,而无需在使用RestTemplate。
1、添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
2、启动类
添加注解
@EnableFeignClients
3、service类
@FeignClient(value ="service-provider",path ="/echo")publicinterfaceOpenFeignService{@GetMapping("/{string}")Stringecho(@PathVariable("string")String string);}
4、controller
@RestController@RequestMapping("test")publicclassOpenFeignController{@AutowiredprivateOpenFeignService openFeignService;@GetMapping("echo/{string}")publicStringtest(@PathVariable("string")String string){return openFeignService.echo(string);}}
5、调用结果
6、其他配置
feign:client:config:#全局配置default:connectTimeout:5000# 连接超时时间,单位毫秒readTimeout:5000# 读取超时时间,单位毫秒#指定服务配置openfeign-demo:connectTimeout:5000readTimeout:5000#请求响应压缩compression:request:enabled:true#压缩媒体类型mime-types: text/xml,application/xml,application/json
#最小请求阈值长度min-request-size:2048response:enabled:true#设置远程调用底层实现技术okhttp:enabled:true
注:设置远程调用底层实现技术为okhttp时,需要引入okhttp的相关依赖
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId></dependency>
五、Gateway(网关)
1、添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
注:spring-cloud-starter-gateway与spring-boot-starter-web不兼容,不建议同时存在
2、配置式路由
在application.yml文件中添加配置
#配置式路由spring:cloud:gateway:routes:#路由的ID-id: taobao_route
#匹配后提供服务的路由地址uri: https://www.taobao.com
predicates:#断言,路径相匹配的进行路由- Path=/tb
#在设置时间之后可以访问- After=2024-01-20T17:42:47.789-07:00#在设置时间之前可以访问- Before=2025-01-20T17:42:47.789-07:00-id: baidu_route
uri: https://www.baidu.com
predicates:- Path=/s
#在设置时间之间可以访问- Between=2024-01-20T17:42:47.789-07:00,2025-01-21T17:42:47.789-07:00#权重断言工厂(group,weight),同组之中80%访问该路由- Weight=group1,8-id: cookie_route
uri: https://example.org
predicates:#匹配cookie(key,value(支持正则表达式))- Cookie=key,value
#匹配请求头(key,value(支持正则表达式))- Header=X-Request-Id, \d+
#匹配请求的Host- Host=**.somehost.org,**.anotherhost.org#匹配请求方式- Method=GET,POST
#匹配请求参数(key,value(支持正则表达式))或(key)- Query=key,value
- Query=key
#权重断言工厂(group,weight),同组之中20%访问该路由- Weight=group1,2#匹配可以访问的远程地址- RemoteAddr=192.168.1.1/24
#匹配请求头的X-Forwarded-For- XForwardedRemoteAddr=192.168.1.1/24
#过滤器filters:#添加请求头- AddRequestHeader=X-Request-red, blue
#当未出现过时才能添加请求头,即如果请求头中已经存在了,则不再继续添加(gateway4以上版本支持)- AddRequestHeadersIfNotPresent=X-Request-Color-1:blue,X-Request-Color-2:green
#添加请求参数- AddRequestParameter=red, blue
#添加相应头- AddResponseHeader=X-Response-Red, Blue
#熔断器(需要添加spring-cloud-starter-circuitbreaker-reactor-resilience4j依赖)-name: CircuitBreaker
args:name: myCircuitBreaker
#发生熔断后执行服务降级fallbackUri: forward:/inCaseOfFailureUseThis
#请求uri添加前缀(如:/hello->/mypath/hello)- PrefixPath=/mypath
#移除URI中指定数量的前缀- StripPrefix=2
#重写URI路径,将/red/blue替换为/provider/depart- RewritePath=/red/blue, /provider/depart
#开启Gateway在注册中心进行服务发现的功能,默认为falsediscovery:locator:enabled:true#将503状态码转换为404loadbalancer:use404:true#全局跨域处理配置globalcors:cors-configurations:'[/**]':allowedOrigins:"*"allowedHeaders:'*'allowedMethods:- GET
- POST
3、api式路由
@ConfigurationpublicclassGatewayConfig{@BeanpublicRouteLocatorgatewayRoutes(RouteLocatorBuilder builder){return builder.routes().route("jd_route",predicateSpec -> predicateSpec.path("/jd").uri("https://jd.com")).build();}}
六、Sentinel(熔断机制)
1、下载并启动Sentinel 控制台
2、添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
3、application.yml中增加配置
spring:cloud:#sentinel相关配置sentinel:#开启饥饿加载eager:truetransport:#开启一个与dashboard通信的进程port:8719dashboard: localhost:8888
版权归原作者 word D 所有, 如有侵权,请联系我们删除。