整合Nacos完成服务注册、调用、容错(哨兵)

一、服务注册

1.添加依赖

<!--nacos-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  <version>2.2.2.RELEASE</version>
</dependency>
<!--服务发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.添加配置文件(我使用的是yml)

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
  application:
    name: service-oss # 服务名

 3.查看是否成功注册

启动nacos

整合Nacos完成服务注册、调用、容错(哨兵)

 访问nacos的后台管理系统出现下面的就说明注册成功,我注册了三个服务

整合Nacos完成服务注册、调用、容错(哨兵) 二、服务之间的调用(OpenFeign)

1.引入依赖

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> 

 2.调用者开启调用注解

调用者(客户端)在自己的启动类上添加@EnableFeignClients注解,然后再写一个调用接口方便管理调用

@FeignClient(value = "service-core")
public interface CoreUserInfoClient {
    /**
     * 调用core中的手机号是否已经注册方法
     * @param mobile 手机号
     * @return
     * 访问地址一定是被调用的者(服务端)接口的访问路径
     */
    @GetMapping("/api/core/userInfo/checkMobile/{mobile}")
    boolean checkMobile(@PathVariable String mobile);
}

 3.使用服务端提供的接口完成功能的实现

//注册接口

@Resource
private CoreUserInfoClient coreUserInfoClient;

//调用服务端的手机号是否注册接口
boolean result = coreUserInfoClient.checkMobile(mobile);

//手机号被注册就抛出异常交给统一异常处理
Assert.isTrue(result == false, ResponseEnum.MOBILE_EXIST_ERROR);

4修改默认配置

openfeign默认的连接超时时间为1秒,测试时很可能会出现远程调用超时错误

feign:
  client:
    config:
      default:
        connectTimeout: 10000 #连接超时配置
        readTimeout: 600000 #执行超时配置

三、服务容错

1.添加依赖

<!--服务容错-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2.开启哨兵模式

在服务端的配置中开启对Sentinel的支持

feign:
  sentinel:
    enabled: true  #开启Feign对Sentinel的支持

 3.创建容错类

创建服务熔断包并添加core的熔断实现类

整合Nacos完成服务注册、调用、容错(哨兵)

实现的是服务调用接口(implements CoreUserInfoClient)

@Service
@Slf4j
public class CoreUserInfoClientFallback implements CoreUserInfoClient {
    @Override
    public boolean checkMobile(String mobile) {
        log.error("远程调用失败,服务熔断");
        return false;
    }
}

上一篇:如何使用nacos配置中心


下一篇:Spring Cloud Alibaba技术栈【下】