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
@RefreshScope
public class Properties {

    @Value("${testName}")
    public String 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: 88

spring:
  application:
    # 应用名称
    name: service-provider
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848

(3)在启动类添加@EnableDiscoveryClient 注解开启服务注册发现功能

(4)controller方法

@RestController
public class TestController {
    @RequestMapping("/echo/{string}")
    public String echo(@PathVariable String 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: 8080

spring:
  application:
    # 应用名称
    name: service-consumer
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848

(3)启动类

添加@EnableDiscoveryClient 注解开启服务注册发现功能,并给 RestTemplate 实例添加 @LoadBalanced 注解

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

}

(4)controller方法

@RestController
public class TestController {

    private final RestTemplate restTemplate;

    @Autowired
    public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String 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:8848
    config:
        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")
public interface OpenFeignService {
    @GetMapping("/{string}")
    String echo(@PathVariable("string") String string);
}

4、controller

@RestController
@RequestMapping("test")
public class OpenFeignController {
    @Autowired
    private OpenFeignService openFeignService;

    @GetMapping("echo/{string}")
    public String test(@PathVariable("string") String string) {
        return openFeignService.echo(string);
    }
}

5、调用结果

在这里插入图片描述

6、其他配置

feign:
    client:
        config:
            #全局配置
            default:
                connectTimeout: 5000 # 连接超时时间,单位毫秒
                readTimeout: 5000 # 读取超时时间,单位毫秒
            #指定服务配置
            openfeign-demo:
                connectTimeout: 5000
                readTimeout: 5000
    #请求响应压缩
    compression:
        request:
            enabled: true
            #压缩媒体类型
            mime-types: text/xml,application/xml,application/json
            #最小请求阈值长度
            min-request-size: 2048
        response:
            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在注册中心进行服务发现的功能,默认为false
      discovery:
        locator:
          enabled: true
      #将503状态码转换为404
      loadbalancer:
        use404: true
      #全局跨域处理配置
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allowedHeaders: '*'
            allowedMethods:
              - GET
              - POST

3、api式路由

@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator gatewayRoutes(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: true
            transport:
                #开启一个与dashboard通信的进程
                port: 8719
                dashboard: localhost:8888

Spring Cloud 是一个开源的框架,用于在分布式系统中构建微服务应用程序。Nacos 是一个开源的注册中心和配置中心,可以作为微服务架构中的基础设施,提供服务发现、服务注册、配置管理、动态路由等功能。Spring CloudNacos整合可以帮助开发者更方便地构建微服务应用程序。 以下是 Spring Cloud 整合 Nacos 的基本步骤: 1. 添加依赖 在 pom.xml 文件中添加 Spring CloudNacos 的依赖。例如,可以添加以下依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.5.RELEASE</version> </dependency> ``` 2. 配置 Nacos 服务器地址 在 application.properties 或 application.yml 文件中配置 Nacos 服务器地址。例如: ``` spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ``` 3. 配置微服务的注册信息 在 application.properties 或 application.yml 文件中配置微服务的注册信息。例如: ``` spring.application.name=my-service spring.cloud.nacos.discovery.group=DEFAULT_GROUP spring.cloud.nacos.discovery.port=8080 spring.cloud.nacos.discovery.instance-id=${spring.application.name}-${spring.cloud.client.ip-address}:${spring.cloud.client.server-port} ``` 4. 启动微服务 在微服务中添加 @EnableDiscoveryClient 注解,启动微服务。例如: ``` @SpringBootApplication @EnableDiscoveryClient public class MyServiceApplication { public static void main(String[] args) { SpringApplication.run(MyServiceApplication.class, args); } } ``` 5. 验证 启动微服务后,可以通过 Nacos 控制台查看微服务的注册信息。例如,可以在 Nacos 控制台中查看 my-service 的实例信息。 以上是 Spring Cloud 整合 Nacos 的基本步骤。除了服务注册和发现外,Nacos 还支持配置管理、动态路由等功能,可以进一步提高微服务架构的可靠性和可扩展性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值