一、微服务架构

  1. 【推荐】依图中所示,微服务API统一通过GateWay路由代理对方开放给外部各种客户端使用,微服务之间内部可以互相调用。

  1. 【推荐】各微服务之间调用在满足业务需要前提下,最好以事件驱动的消息模式来互相通信。

  2. 【强制】微服务之间通过请求响应模式调用时,在消费端必须加入故障容错处理,在请求失败时作出合理响应,不允许重试。

         正例:
    
           @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<>();
    
               }
    
  3. 【推荐】微服务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);

      }

results matching ""

    No results matching ""