调用其他微服务的三种方式

一、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做到了负载均衡。




Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐