1.Eureka(2.0停止维护了) 用nacos替换了
nacos加feign的使用:
1.下载安装文件zip文件,找到启动文件,
2.访问nacos localhost:8848/nacos 用户密码:nacos,nacos
代码实现
1.在edu服务中,注册nacos
2.引入依赖
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.配置nacos的地址(ip)
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
4.在启动类加上@EnableDiscoveryClient //nacos注册
nacos控制监控中nacos localhost:8848/nacos 用户密码:nacos,nacos查看
前提条件,互相调用的服务在nacos中进行注册,下载依赖
1.<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在调用端edu写实现代码,在调用的服务启动类上@EnableFeignClients //微服务 服务调用 的注解
3.在调用端 创建interface 使用注解指定调用服务名称,定义调用方法的方法路径
@FeignClient(name = "service-vod",fallback = VodFileDegradeFeignClient.class) //调用的服务名称
@Component
public interface VodClient {
//定义调用的方法路径
//根据视频id删除阿里云视频
//@PathVariable注解一定要指定参数名称,否则出错
@DeleteMapping("/eduvod/video/removeAlyVideo/{id}")
//PathVariable必须要指定值,不然报错
public R removeAlyVideo(@PathVariable("id") String id);
//定义调用删除多个视频的方法
//删除多个阿里云视频的方法
//参数多个视频id List videoIdList
@DeleteMapping("/eduvod/video/delete-batch")
public R deleteBatch(@RequestParam("videoIdList") List<String> videoIdList);
}
springcloud调用接口的过程
(接口化请求调用)获取服务者名称,使用接口定义方法,获取请求地址
1.feign 服务发现(@FeignClient根据服务的名称地址做接口的调用)
2.hystrkx 熔断器 如果服务端宕机了,就会执行熔断机制,断开连接,如果能调到就继续调用
3.Ribbon 负载均衡 访问数据量大,同时访问一个服务,服务器的压力会比较大,那就会多使用几个服务器,操作相同的业务,
4. http client 最终调用,找到你的服务端名称和地址,做一个调用
hystrkx 熔断器 供分布式的使用,提供了延迟和容错功能
1.服务器宕机,熔断器 会启动熔断机制,服务端无法继续被调用
2.服务器卡机,服务器一定时间内没有响应数据,就会触发延迟处理
代码实现
1.添加依赖
<!--hystrix依赖,主要是用 @HystrixCommand -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2.在调用端开启熔断器
##开启熔断器
#feign.hystrix.enabled=true
##默认是1000毫秒
##hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
3.创建熔断器的实现类(实现调用服务的方法,方法出错了会执行,正常就正常执行)
@Component
public class VodFileDegradeFeignClient implements VodClient {
//出错之后会执行
@Override
public R removeAlyVideo(String id) {
return R.error().message("删除视频出错了");
}
@Override
public R deleteBatch(List<String> videoIdList) {
return R.error().message("删除多个视频出错了");
}
}
最后在调用端的@FeignClient中(name = "service-vod",fallback = VodFileDegradeFeignClient.class) 加fallback = VodFileDegradeFeignClient.class
原文地址:https://www.cnblogs.com/jerrybu/p/14515459.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。