ribbon 调用方式
1 通过 RestTemplate 方式调用
启动类中
创建实例
@Autowired
RestTemplateBuilder restTemplateBuilder;
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return restTemplateBuilder.build();
}
业务中注入restTemplate
@Autowired
private LoadBalancerClient loadBalancerClient;
调用
Object obj = restTemplate.getForObject("http://product-service/api/v1/product/find?id="+productId, Object.class);
2 通过loadbalance 调用
直接注入
@Autowired
private LoadBalancerClient loadBalancerClient;
具体调用
ServiceInstance instance = loadBalancerClient.choose("product-service");
String url = String.format("http://%s:%s/api/v1/product/find?id=" + productId, instance.getHost(), instance.getPort());
RestTemplate restTemplate = new RestTemplate();
Object obj = restTemplate.getForObject(url, Object.class);
feign 调用
启动类中加注解@EnableFeignClients,
编写接口加注解 注明远程服务名称 并路由地址与服务保持一致
@FeignClient(name = "product-service")
public interface ProductClient {
@GetMapping("/api/v1/product/find")
String findById(@RequestParam(value = "id",defaultValue = "",required = false) int id);
}
业务中注入并直接调用
@Autowired
private ProductClient productClient;
hystrixy调用 启动类注解 @EnableCircuitBreaker
方式一
@HystrixCommand(fallbackMethod = "defaultStores")
public Object getStores(Map<String, Object> parameters) {
//do stuff that might fail
}
public Object defaultStores(Map<String, Object> parameters) {
return /* something useful */;
}
方式二 整合feign 使用
编写一个HistrxyClient 类型并实现 feign 注解所在得接口
开启feign 支持histrixy
feign.hystrix.enabled = true
feign 所在得接口中指定class 对象
@FeignClient(name = "product-service",fallback = HistrxyClient.class)