spring cloud 入门(五)【负载均衡与 FeignClient 容错机制一(通过类容错)】

一 负载均衡

spring cloud 负载均衡非常简单,现在服务提供者 menu,重新copy 一份munu ,命名 menu2 ,将端口 修改为 8764 ,其他配置都不变

这个时候 如何 再次调用 user/getMenu 接口, 查看 menu 和 menu2 的日志,我们可以看出来,user 访问一次,两个 menu 是通过 轮询交替访问的

容错机制

 

容错是荣的 服务器 提供者的 错,如何服务提供者 代码逻辑有问题,就会报错

修改 menu 提供者  menu/getMenu 代码,

修改  MenuController 代码,直接抛异常

@RequestMapping(value = "/menu/getMenu")
public @ResponseBody
List>
getSubNav(HttpServletRequest request, HttpServletResponse response) {
    throw new RuntimeException();
}

这个时候,我们再通过 user 调用 menu 微服务 中getMenu 的方法

spring cloud 入门(五)【负载均衡与 FeignClient 容错机制一(通过类容错)】_第1张图片

显然 这个将错误 直接打印到页面上 是非常不友好的

 

spring cloud 提供了  Hystric 组件 对这样的问题进行处理,具体操作如下:

以下操作都再服务消费方进行修改,也就是在user中 进行修改

第一个坑: 

feign.hystrix.enabled=true  这个默认是false 需要手动打开

user 中 application.properties  中

server.port=8763
eureka.client.service-url.defaultZone = http://localhost:8761/eureka/
spring.application.name=user
spring.profiles.active=dev
feign.hystrix.enabled=true

UserService 中 添加   fallback 失败回调

@FeignClient(value = "menu", fallback = UserServiceHystric.class)

代码如下:

package com.study.user.service;


import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@FeignClient(value = "menu", fallback = UserServiceHystric.class)
public interface UserService {


    @RequestMapping(value="menu/getMenu")
    List> getMenu();


}

创建 UserServiceHystric 代码如下 需要实现 getMenu 方法

 

package com.study.user.service;

import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class UserServiceHystric implements UserService {

    @Override
    public List> getMenu() {
        List> list = new ArrayList<>();
        Map map = new HashMap<>();
        map.put("menu", "菜单");
        list.add(map);
        return list;
    }
}

再次访问  http://127.0.0.1:8763/user/getMenu

 

spring cloud 入门(五)【负载均衡与 FeignClient 容错机制一(通过类容错)】_第2张图片

容错返回的内容可以根据我们实际情况,自己定义

 

 

 

 

 

 

你可能感兴趣的:(spring cloud 入门(五)【负载均衡与 FeignClient 容错机制一(通过类容错)】)