天天看點

sprigclound調用其他微服務的三種方式

調用其他微服務的三種方式

一、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 裡面需要填充變量的名字,不然也是運作不成功的。                
首先通過@EnableFeignCleints注解開啟FeignCleint
 根據Feign的規則實作接口,并加@FeignCleint注解
 程式啟動後,會進行包掃描,掃描所有的@ FeignCleint的注解的類,并将這些資訊注入到ioc容器中。
 當接口的方法被調用,通過jdk的代理,來生成具體的RequesTemplate
 RequesTemplate在生成Request
 Request交給Client去處理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
 最後Client被封裝到LoadBalanceClient類,這個類結合類Ribbon做到了負載均衡。
           

繼續閱讀