0


Spring Cloud整合nacos使用

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与上面一致的配置

nacos配置

二、启动服务发现

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服务管理

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
标签: spring cloud 后端

本文转载自: https://blog.csdn.net/weixin_42382998/article/details/139723904
版权归原作者 word D 所有, 如有侵权,请联系我们删除。

“Spring Cloud整合nacos使用”的评论:

还没有评论