比较说明:

image.pngimage.png

RestTemplate使用:

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

getForEntity()

getForEntity方法的返回值是一个ResponseEntity<T>ResponseEntity<T>是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。比如下面一个例子

  1. @RequestMapping("/gethello")
  2. public String getHello() {
  3. ResponseEntity<String> responseEntity = restTemplate.getForEntity(
  4. "http://HELLO-SERVICE/hello", String.class);
  5. String body = responseEntity.getBody();
  6. HttpStatus statusCode = responseEntity.getStatusCode();
  7. int statusCodeValue = responseEntity.getStatusCodeValue();
  8. HttpHeaders headers = responseEntity.getHeaders();
  9. StringBuffer result = new StringBuffer();
  10. result.append("responseEntity.getBody():").append(body).append("<hr>")
  11. .append("responseEntity.getStatusCode():").append(statusCode).append("<hr>")
  12. .append("responseEntity.getStatusCodeValue():").append(statusCodeValue).append("<hr>")
  13. .append("responseEntity.getHeaders():").append(headers).append("<hr>");
  14. return result.toString();
  15. }
  • getForEntity的第一个参数为我要调用的服务的地址,这里我调用了服务提供者提供的/hello接口,注意这里是通过服务名调用而不是服务地址,如果写成服务地址就没法实现客户端负载均衡了。
  • getForEntity第二个参数String.class表示我希望返回的body类型是String
  • 拿到返回结果之后,将返回结果遍历打印出来

image.png
带参方式:

  1. @RequestMapping("/sayhello")
  2. public String sayHello() {
  3. ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/sayhello?name={1}", String.class, "张三");
  4. return responseEntity.getBody();
  5. }
  6. @RequestMapping("/sayhello2")
  7. public String sayHello2() {
  8. Map<String, String> map = new HashMap<>();
  9. map.put("name", "李四");
  10. ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/sayhello?name={name}", String.class, map);
  11. return responseEntity.getBody();
  12. }

getForObject()

getForObject函数实际上是对getForEntity函数的进一步封装,如果你只关注返回的消息体的内容,对其他信息都不关注,此时可以使用getForObject

  1. @RequestMapping("/book2")
  2. public Book book2() {
  3. Book book = restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);
  4. return book;
  5. }

openFeign使用:

主启动类添加注解
image.png
消费端添加接口,接口中的方法为提供者暴露的方法,@FeignClient()中为提供者服务名
image.png

方法中调用:
image.png

openFeign服务超时设置:

默认超时时间为一秒钟,可在yml中设置

  1. ribbon:
  2. #建立链接时间
  3. ConnectTimeOut: 5000
  4. #只建立链接后从服务器获取资源时间(毫秒)
  5. ReadTimeOut: 5000

openFeign日志打印:

提供了日志打印功能,我们可以通过调整日志级别,从而了解Feign中的http请求细节,
说白了就是对Feign接口的调用情况进行监控和输出。

日志级别:
image.png

代码中添加配置类:
image.png
yml中添加配置:**

logging:
    level:
  #feign日志以什么级别监控哪个接口
      com.kai.springCloud.service.helloService: debug