一、服务注册
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的后台管理系统出现下面的就说明注册成功,我注册了三个服务
二、服务之间的调用(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的熔断实现类
实现的是服务调用接口(implements CoreUserInfoClient)
@Service
@Slf4j
public class CoreUserInfoClientFallback implements CoreUserInfoClient {
@Override
public boolean checkMobile(String mobile) {
log.error("远程调用失败,服务熔断");
return false;
}
}