nacos服务中心注册

问题

java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-ucenter

pom.xml引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 <version>${project.version}</version>
</dependency>
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
 <version>${project.version}</version>
</dependency>

yml文件中配置nacos

1
2
3
4
5
6
7
8
9
10
11
# 服务名
spring:
application:
name: service-ucenter

# nacos配置
spring
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

然后application.java中

1
2
3
@EnableDiscoveryClient 开启服务注册发现功能

@EnableFeignClients 启用feign客户端,将远程服务中的方法映射为一个本地Java方法调用

调用service-vod服务中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 调用的服务名称
*
* @author Blue
* fallback方法的返回值一般是设置的默认值或者来自缓存.
*/
@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
@Component
public interface VodClient {

/**
* 定义调用的方法路径
* 根据视频id删除阿里云视频
* PathVariable注解一定要指定参数名称,否则出错
*
* @param id 视频id
*/
@DeleteMapping("/eduVod/video/removeAlyVideo/{id}")
public Result removeAlyVideo(@PathVariable String id);

/**
* 定义调用删除多个视频的方法
* 删除多个阿里云视频的方法
* 参数多个视频id List videoIdList
*
* @param videoIdList 多个视频id
*/
@DeleteMapping("/eduVod/video/deleteBatch")
public Result deleteBatch(@RequestParam("videoIdList") List<String> videoIdList);
}

熔断器使用

雪崩效应

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。

参考-博主-纯洁的微笑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author Blue
* 熔断器:出错就使用,比如 宕机
*/
@Component
public class VodFileDegradeFeignClient implements VodClient {
/**
* 出错之后会执行
*/
@Override
public Result removeAlyVideo(String id) {
return Result.error().message("删除视频失败");
}

@Override
public Result deleteBatch(List<String> videoIdList) {
return Result.error().message("批量删除视频失败");
}
}
  1. © 2020 Liu Yang    湘ICP备20003709号

请我喝杯咖啡吧~

支付宝
微信