sprigclound调用其他微服务的三种方式
调用其他微服务的三种方式一、rest方式(底层Httpclient工具)@SuppressWarnings("unchecked")@Servicepublic class MemberService {@AutowiredRestTemplate restTemplate;public List<String> getOrderBy...
·
调用其他微服务的三种方式
一、rest方式(底层Httpclient工具)
@SuppressWarnings("unchecked")
@Service
public class MemberService {
@Autowired
RestTemplate restTemplate;
public List<String> getOrderByUserList() {
return restTemplate.getForObject("http://service-member/getUserList",
List.class);//返回值.class
}
}
二、ribbon方式(底层Httpclient工具)
在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。使用负载均衡策略轮训到调用服务接口
@EnableEurekaClient
@SpringBootApplication
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
二、Feign方式(底层Httpclient工具) feignClient已经默认使用了ribbon自带负载均衡
启动类@EnableFeignClients
fegin 代码
@FeignClient(value="service-member",fallback=MemberFeignService.class)
public interface MemberFeign {
@RequestMapping("/getMemberAll")
public List<String> getOrderByUserList(); //方法名随便写
}
* 1、这里需要设置请求的方式为 RequestMapping 注解,用 GetMapping 注解是运行不成功的,即 GetMapping 不支持。
*
* 2、注解 PathVariable 里面需要填充变量的名字,不然也是运行不成功的。
如果入参是一个对象的话,那么这个方法在 feign 里面默认为 POST 方法,就算你写成 GET 方式也无济于事。
首先通过@EnableFeignCleints注解开启FeignCleint
根据Feign的规则实现接口,并加@FeignCleint注解
程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
RequesTemplate在生成Request
Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。
更多推荐
已为社区贡献8条内容
所有评论(0)