使用RestTemplate

在上一节的例子里已经讲解,这里略过。

使用Feign

RestTemplate是Spring自己封装的工具,Feign是NetFlix OSS中提供的工具,更方便使用。
第一步:在client-common模块的 pom.xml中添加依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>

第二步:定义Feign客户端和使用Feign客户端

  1. package com.demo;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  7. import org.springframework.cloud.openfeign.EnableFeignClients;
  8. import org.springframework.cloud.openfeign.FeignClient;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.PathVariable;
  11. import org.springframework.web.bind.annotation.RestController;
  12. /**
  13. * @author wujiawei
  14. * @see
  15. * @since 2021/4/12 下午8:58
  16. */
  17. @EnableFeignClients
  18. @EnableDiscoveryClient
  19. @SpringBootApplication
  20. public class AlibabaNacosDiscoveryClientFeignApplication {
  21. public static void main(String[] args) {
  22. SpringApplication.run(AlibabaNacosDiscoveryClientFeignApplication.class, args);
  23. }
  24. @FeignClient("alibaba-nacos-discovery-server")
  25. interface EchoService{
  26. @GetMapping("/echo/{message}")
  27. String echo(@PathVariable("message") String message);
  28. }
  29. @Slf4j
  30. @RestController
  31. static class OpenFeignController {
  32. @Autowired
  33. private EchoService echoService;
  34. @GetMapping("feign/echo/{message}")
  35. public String feignEcho(@PathVariable String message) {
  36. return echoService.echo(message);
  37. }
  38. }
  39. }
  • 通过@EnableFeignClients注解开启扫描Feign客户端的功能
  • 通过interface来定义Feign客户端
  • 使用@FeignClient注解指定接口要调用的服务名称
  • 使用Spring MVC的注解如@GetMapping绑定服务提供方的REST接口

代码示例

  • Github:
  • Gitee: