微服务集群
为什么要搭建集群?
解决高并发
服务提供者集群
同一个服务部署多份(正式环境)
新建一个application.yml副本,互相注册,修改profiles参数启动同一个spring boot应用(测试阶段)
服务消费者负载均衡调用
ribbon feign都可以实现负载均衡
常见的负载均衡策略:
- 轮询
- 可用性检查
- 权重
ribbon
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
//通过服务名完成调用
private final String URL_PREFIX = "http://USER-PROVIDER/user/";
//暴露通过id远程查询product的接口
@GetMapping("/product/{id}")
public User getProductById(@PathVariable("id") Long id){
String url = URL_PREFIX+id;
//期望以接口的方式进行调用
return restTemplate.getForObject(url,User.class);
}
}
feign
入门配置扫描client
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderSerivce9003Application {
public static void main(String[] args) {
SpringApplication.run(OrderSerivce9003Application.class,args);
}
}
client
@FeignClient(value = "USER-PROVIDER")
@RequestMapping("/user")
public interface UserClient {
/**
* 通过Id获取用户
* 回调托底
* @param id id
* @return {@link User}
*/
@GetMapping("/{id}")
public User getUserById(@PathVariable(name = "id")Long id);
}
Hystrix
Hystrix是什么?
微服务架构处理服务健壮性的框架
为什么要使用Hystrix?
解决微服务架构的雪崩现象
解决措施
- 隔离
- 熔断
- 降级
Hystrix
服务提供者实现ribbon
导包 @EnableHystrix
Feign
feign熔断机制是封装hystrix
Zuul网关
Zuul网关是什么?
给外部请求提供统一的入口,并且我们可以通过过滤完成过渡,而且封装了负载均衡ribbon和熔断Hystrix
实现
- 基本配置
- 路由配置(使用别名替代服务名访问,还可以加上前缀)
- 自定义拦截器实现登录
- 负载均衡和断路器:配上超时时间
Config Server
为什么需要使用Config Server?
配置文件统一管理
步骤
- 在GitHub上新建仓库,上传配置文件
- configserver:通过它读取配置文件
- configclient:真正读取配置文件的地方