设为首页 加入收藏

TOP

SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断(二)
2023-07-25 21:28:01 】 浏览:90
Tags:SpringCloud Eureka feign 程调用 hystrix
endency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- feign远程调用依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.3.5.RELEASE</version> </dependency>

5.2.2 配置信息

# 端口
server:
  port: 8098

spring:
  application:
    name: edocmall-web
# 服务名

# eureka 注册中心的配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8096/eureka
  # 关闭自我保护机制,保证不可用的服务及时剔除
  server:
    enable-self-preservation: false

# 开启客户端服务降级,默认是关闭的,需要打开
feign:
  hystrix:
    enabled: true

5.2.3 代码介绍

5.2.3.1 业务层接口
//指定服务名
@FeignClient(value = "edocmall-server") 
public interface WebEntryService {
    //基于feign 远程调用edoc-server服务端提供的查询文档详情接口
    @GetMapping("/entry") //必须跟远程请求一直
    EdocEntryVO invokeEntryServiceUserFeign(@RequestParam("id") Integer id); //必须写 @RequestParam("id")
    // 注意 一点更要写 @RequestParam("id") 里面的参数必须写
    
}
5.2.3.1 控制层直接调用接口
@RestController
public class WebEntryController {
    
    @Autowired
    private WebEntryService webEntryService;
    
      // 根据文档编号,获取文档详情
    @GetMapping("/entryById")
    public RequestResult<EdocEntryVO> entryDetail(Integer id){
        log.info("------ 根据文档编号:{},获取文档详情 ------",id);

      //基于feign 远程调用服务端接口,获取文档详情
      EdocEntryVO edocEntryVO = webEntryService.invokeEntryServiceUserFeign(id);

       return ResultBuildUtil.success(edocEntryVO);

    }
    
}

5.2.4 主启动类上的注解

@EnableEurekaClient  // 开启 eureka 服务注册,将此服务注册到 eureka中
@EnableFeignClients  //开启 feign 远程调用服务

5.2.5 请求测试

eureka 注册中心:

feign远程调用:

6、Feign的服务降级与熔断

6.1 服务降级(服务消费端)

6.1.1 依赖

由于feign中有hystrix的依赖,所以不用单独添加;

6.1.2 hytrix 配置

# 开启客户端服务降级,默认是关闭的,需要打开
feign:
  hystrix:
    enabled: true

6.1.3 接口指定服务降级后的实现类

@FeignClient(value = "edocmall-server",fallback = WebEntryServiceImpl.class) //fallback 指定调用失败后 降级调用的数据
public interface WebEntryService {
    ......
}

6.1.4 实现类,具体降级服务操作

@Service
public class WebEntryServiceImpl implements WebEntryService {

    @Override
    public EdocEntryVO invokeEntryServiceUserFeign(Integer id) {
        //此方法,就是regn远程调用,触发服务剪辑的默认实现,正常请求不会调用
        //只用远程 feign调用失败,才会调用
        EdocEntryVO edocEntryVO = new EdocEntryVO();
        edocEntryVO.setId(999);
        edocEntryVO.setCid(0);
        edocEntryVO.setTitle("触发熔断服务降级");
        edocEntryVO.setSummary("当feign远程调用接口失败,默的默认实现");
        edocEntryVO.setUploadUser("feign-hystrix");
        edocEntryVO.setCreateDate(new Date());

        return edocEntryVO;
    }

6.1.5 测试

6.1.5.1 不添加服务降级时 服务端宕机情况

6.1.5.2 添加服务降级后 服务端宕机情况

6.1.5.3 添加服务降级后 服务端正常,接口报错

接口报错信息:

6.2 服务熔断(服务提供端)

6.2.1 依赖

<!--导入Hystrix依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

6.2.2 熔断 备选方法 和 熔断触发条件

@Slf4j
@RestController
public class EntryController {

    @Autowired
    private EntryService entryService;

    //根据 id 查询文档详情
    @GetMapping("/entry")
    @HystrixCommand(fallbackMethod = "fallbackStoryDetail")  //指定 服务熔断后的备选方法
    public EdocEntryVO entryDetail(@RequestParam
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Boot 并行任务,这才是优.. 下一篇记录一次非常麻烦的调试

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目