一 负载均衡
spring cloud 负载均衡非常简单,现在服务提供者 menu,重新copy 一份munu ,命名 menu2 ,将端口 修改为 8764 ,其他配置都不变
这个时候 如何 再次调用 user/getMenu 接口, 查看 menu 和 menu2 的日志,我们可以看出来,user 访问一次,两个 menu 是通过 轮询交替访问的
容错机制
容错是荣的 服务器 提供者的 错,如何服务提供者 代码逻辑有问题,就会报错
修改 menu 提供者 menu/getMenu 代码,
修改 MenuController 代码,直接抛异常
@RequestMapping(value = "/menu/getMenu")
public @ResponseBody
List
这个时候,我们再通过 user 调用 menu 微服务 中getMenu 的方法
显然 这个将错误 直接打印到页面上 是非常不友好的
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
创建 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
再次访问 http://127.0.0.1:8763/user/getMenu
容错返回的内容可以根据我们实际情况,自己定义