1. 程式人生 > >springcloud中RestTemplate的三種使用方式

springcloud中RestTemplate的三種使用方式

首先在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;
    }
}