一、微服务架构
- 【推荐】依图中所示,微服务API统一通过GateWay路由代理对方开放给外部各种客户端使用,微服务之间内部可以互相调用。
【推荐】各微服务之间调用在满足业务需要前提下,最好以事件驱动的消息模式来互相通信。
【强制】微服务之间通过请求响应模式调用时,在消费端必须加入故障容错处理,在请求失败时作出合理响应,不允许重试。
正例: @HystrixCommand(fallbackMethod = "findEmptyMovies") public List<Movie> findMoviesByCustomer(@PathVariable Long customerId) { /**远程调用用户服务*/ Customer customer = getCustomer(customerId); if (customer==null) return new ArrayList<>(); return customer.getAge()> 18 ? movieRepository.findAll() : movieRepository.findByLevel("P"); } public List<Movie> findEmptyMovies(Long customerId){ logger.info("customer services was shut down !"); return new ArrayList<>(); }
【推荐】微服务API之间调用,HTTP客户端推荐使用Feign,其次RestTemplate,不要自己封装或第三方HTTP CLIENT。
正例:
@FeignClient("customer-services")
interface CustomerService{
@RequestMapping(method = RequestMethod.GET, value = "/customers/{customerId}",
consumes = "application/json")
Customer getCustomer(@PathVariable("customerId") Long customerId);
}