Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】

Spring Cloud Alibaba-(1)搭建项目环境

Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】

Spring Cloud Alibaba-(3)OpenFeign【服务调用】

Spring Cloud Alibaba-(4)Sentinel【流控和降级】

Spring Cloud Alibaba-(5)Seata【分布式事务】

Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

Spring Cloud Alibaba-(7)RocketMQ【分布式消息队列】

1.Nacos 官网-https://nacos.io/

Nacos 是一个服务注册与发现、配置管理和服务管理平台。

(1)服务注册与发现

        服务注册:服务启动时,向 Nacos 注册,包含服务名、IP、端口等信息。

        服务发现:客户端从 Nacos 获取服务列表,选择实例进行调用。

        心跳检测:服务实例定期发送心跳包,Nacos 检测到异常时会移除不可用实例 。 

(2)配置管理

        配置信息存储到 Nacos,还支持动态配置更新,可通过 Nacos 客户端获取配置信息。 

2.下载对应版本的Nacos

3df33261ee12433793e8cf89ba37793c.png

3.必须使用 bootstrap.yml 配置 nacos

3.1 订单微服务 bootstrap.yml 配置 nacos

server:
  port: 8000

spring:
  application:
    name: orders-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springcloud2024
    username: ***
    password: ***
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848

3.2 产品微服务 bootstrap.yml 配置 nacos

server:
  port: 8400

spring:
  application:
    name: orders-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springcloud2024
    username: ***
    password: ***
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848

3.3 用户微服务 bootstrap.yml 配置 nacos

server:
  port: 8300

spring:
  application:
    name: orders-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springcloud2024
    username: ***
    password: ***
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848

4. 订单、产品、用户微服务 pom.xml 引入依赖

<!-- nacos-discovery 服务注册与发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- nacos-config 配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

5.standalone 模式启动 Nacos

5403c78d08794cd59a794793b21fa862.png

6.启动微服务,会自动将微服务注册到Nacos

7.进入Nacos-DashBoard查看(http://localhost:8848/nacos

c211a5e243204b7fb448a8c8fdc9b086.png

8.Nacos 配置管理

8.1 Nacos 使用 mysql 持久化,配置完成后重启Nacos

de693d0eefa543409acb39b0857f5379.png

8.2 Nacos 配置默认是Properties格式,如果使用yaml格式,要在bootstrap配置

8.2.1 Nacos创建2个配置文件

acec1dffcee54a14b45f20f788ca9532.png

847532f3a57f404099376f51dba6beb1.png

8.2.2 bootstrap.yml 配置

c27bcb1b189945d0bc3253f5be4822e0.png

8.3 @Value 注解获取Nacos配置值,@RefreshScope 动态刷新获取Nacos修改的配置值

package com.dragon.controller;

import cn.dev33.satoken.util.SaResult;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.dragon.openfeign.ProductServiceFeign;
import com.dragon.service.IOrdersService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

@Tag(name = "订单微服务")
@Slf4j
@RefreshScope
@RestController
@RequestMapping("/order")
public class OrdersController {
    @Autowired
    private IOrdersService ordersService;

    @Qualifier("com.dragon.openfeign.ProductServiceFeign")
    @Autowired
    private ProductServiceFeign productServiceFeign;

    @Value("${env.name}")
    private String envName;

    @Operation(summary = "获取 Nacos 配置值")
    @GetMapping("/config")
    public String config(){
        return envName;
    }

    @Operation(summary = "下单")
    @PostMapping("/add/{productId}")
    public SaResult add(@PathVariable("productId") String productId){
        return ordersService.add(productId);
    }

    @Operation(summary = "测试调用产品的 test() 出现异常")
    @GetMapping("/test")
    public SaResult test(){
        return productServiceFeign.test();
    }


//    /**
//     *  热点规则,必须使用 @SentinelResource,
//     *  @SentinelResource 优先级高于全局流控异常处理器
//     */
//    @GetMapping("/get/{id}")
//    @SentinelResource(value = "getById",blockHandler = "hotBlockHandler")
//    public String getById(@PathVariable("id") String id){
//        return "正常访问";
//    }
//
//    public String hotBlockHandler(@PathVariable("id") String id,BlockException e){
//        return "热点异常处理器";
//    }
    
}

8.4 调用接口获取 Nacos 配置值,会读取 yml 配置数组中下标大的配置

b5da05f69c0d400e8489bb7d2063043e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值