SprirngBoot微服务之间的交互—— restTemplate

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SprirngBoot微服务之间的交互—— restTemplate相关的知识,希望对你有一定的参考价值。

一 例:需要在storage服务中请求utils服务的某个接口(两个服务都已向同一台eureka server 注册)

步骤:

1 在utils创建需被调用的接口

@RestController
@RequestMapping("/api")
public class CheckIPResource {
      @PostMapping("/checkip")
      public String checkIP(@RequestBody TestEntity testEntity) {
          //处理数据
          // 返回结果
          return "404";
      }
}

2 在storage的主类里创建restTemplate

位置: com.ejtone.ejt1.StorageApp
?
public class StorageApp {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){ return new RestTemplate(); }
}

3 在storage需要调用utils接口的地方去调用

public class CheckIpService {
?
    @Autowired
    private RestTemplate restTemplate;
    
    public void testFrom(TestEntity testEntity){
    
      // postForObject   请求方式:post  常用的请求方式还有get,具体见下方第二点
      // http://utils/api/checkip  utils:是utils微服务向eureka server注册时的名称,后接具体位置
      // new HttpEntity<>(testEntity) 请求体 --可带请求头,具体见下方第三点
      //String.class 请求响应返回后的数据的类型
      restTemplate.postForObject("http://utils/api/checkip",
                                 new HttpEntity<>(testEntity),
                                 String.class);
    }
}

二 请求方式除了上面使用的post之外,还有getForObject:

// 参数url是http请求的地址
// Class responseType  请求响应返回后的数据的类型
// String... urlVariables 请求中需要设置的参数
RestTemplate.getForObject(String url, Class responseType, String... urlVariables)
?
例如下方,url上带着一个参数{id},最后执行该方法会返回一个String类型的结果,后面的id是请求的一个具体变量。
template.getForObject(url + "get/{id}", String.class, id);

三 HttpEntity<>(请求体,请求头)

public class ParService {
    @Autowired
    private RestTemplate restTemplate;
    
    public Par setPar(TxtFileVM txtFileVM, HttpServletRequest request) {
            //创建一个请求头
            HttpHeaders headers = new HttpHeaders();
            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String key = (String) headerNames.nextElement();
                String value = request.getHeader(key);
                headers.add(key, value);
            }
            txtPath = restTemplate.postForObject("http://storage/api/create/txtfile",
                                                  new HttpEntity<>(txtFileVM,headers),
                                                  String.class);
}

 

以上是关于SprirngBoot微服务之间的交互—— restTemplate的主要内容,如果未能解决你的问题,请参考以下文章

微服务前端和后端的交互

服务发现之三分天下

微服务监控案例之一

微服务架构优缺点

微服务系列微服务注册与发现

基于消息中间件开发的优点