2017-02-28 7 views
1

아시다시피, 리본의 기능을 포함 시키십시오. 필자는이를 코드에서 증명합니다. feign을 사용할 때 기본 규칙은 라운드 로빈 규칙입니다. 하지만 내 고객 코드에서 규칙을 변경하려면 리본 만 사용하면됩니까? 다음은 내 코드입니다. 누군가 도움이됩니다.스프링 클라우드에서로드 밸런싱 규칙을 조정할 수있는 방법은 무엇입니까

ConsumerApplication.java

@SpringBootApplication 
@EnableDiscoveryClient 
@EnableFeignClients 
@EnableCircuitBreaker 
public class ConsumerApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(ConsumerApplication.class, args); 
    } 
} 

documentation에서 UserFeignClient의 된 .java

@FeignClient(name = "cloud-provider", fallback = UserFeignClient.HystrixClientFallback.class) 
public interface UserFeignClient { 
    @RequestMapping("/{id}") 
    BaseResponse findByIdFeign(@RequestParam("id") Long id); 

    @RequestMapping("/add") 
    BaseResponse addUserFeign(UserVo userVo); 

    @Component 
    class HystrixClientFallback implements UserFeignClient { 
     private static final Logger LOGGER = LoggerFactory.getLogger(HystrixClientFallback.class); 

     @Override 
     public BaseResponse findByIdFeign(@RequestParam("id") Long id) { 
      BaseResponse response = new BaseResponse(); 
      response.setMessage("disable"); 
      return response; 
     } 

     @Override 
     public BaseResponse addUserFeign(UserVo userVo) { 
      BaseResponse response = new BaseResponse(); 
      response.setMessage("disable"); 
      return response; 
     } 
    } 
} 

FeignController.java

@RestController 
public class FeignController { 

    @Autowired 
    private UserFeignClient userFeignClient; 

    @GetMapping("feign/{id}") 
    public BaseResponse<Date> findByIdFeign(@PathVariable Long id) { 
     BaseResponse response = this.userFeignClient.findByIdFeign(id); 
     return response; 
    } 

    @GetMapping("feign/user/add") 
    public BaseResponse<Date> addUser() { 
     UserVo userVo = new UserVo(); 
     userVo.setAge(19); 
     userVo.setId(12345L); 
     userVo.setUsername("nick name"); 
     BaseResponse response = this.userFeignClient.addUserFeign(userVo); 
     return response; 
    } 
} 

답변

4

:

@RibbonClient(name = "cloud-provider", configuration = CloudProviderConfiguration.class) 
public class ConsumerApplication { 
    /* ... */ 
} 

class CloudProviderConfiguration { 
    @Bean 
    public IRule ribbonRule(IClientConfig config) { 
     return new RandomRule(); 
    } 
} 
+0

작동합니다! 고맙습니다 ! @spencergibb –

+0

하지만 여러 공급자가있는 경우 어떻게 RibbonClient를 구성 할 수 있습니까? –

+2

나는 그것을 얻었다. @RibbonClients를 사용하십시오. –