springcloud中RestTemplate的三種使用方式
阿新 • • 發佈:2018-11-12
首先在A應用Controller中寫個方法 例如:
package com.hlvy.hlvyeclient.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * HttpClienTest * * @author heng **/ @RestController @RequestMapping("httpclien") public class HttpClienTest { @RequestMapping("httpstr") public String gethttpstr(){ return "hello http clien"; } }
接著在b應用呼叫
package com.hlvy.order.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; /** * 第三種方法配置 * RestTemplateConfig * * @author heng **/ @Component public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
package com.hlvy.order.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * HttpClient * * @author heng **/ @RestController @RequestMapping("client") @Slf4j public class HttpClient { //第二種方式 /* @Autowired private LoadBalancerClient loadBalancerClient*/; //第三種方式 @Autowired private RestTemplate restTemplate; @RequestMapping("clitest") public String hclient(){ //跨服務呼叫 //第一種方法直接使用RestTemplate url寫死 /* RestTemplate restTemplate = new RestTemplate(); String res = restTemplate.getForObject("http://localhost:8081/httpclien/httpstr",String.class); log.info(res+"---------------------------");*/ //第二種方法 利用loadBalancerClient通過應用名獲取url 然後再使用 RestTemplate /* RestTemplate restTemplate = new RestTemplate(); ServiceInstance serviceInstance = loadBalancerClient.choose("HLVYCLIENT"); String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/httpclien/httpstr"); String res = restTemplate.getForObject(url,String.class); log.info(res+"---------------------------666");*/ //第三種方式 利用@LoadBalanced註解 可在restTemplate使用應用名字 String str = restTemplate.getForObject("http://HLVYCLIENT/httpclien/httpstr",String.class); log.info(str+"-------------------------------------777"); return str; } }