下面是“从零开始学Spring Boot整合Feign跨服务调用的方法”的完整攻略:
1. 准备工作
1.1 创建两个Spring Boot应用
我们先创建两个Spring Boot应用,一个为服务提供方,一个为服务消费方。
# 服务提供方
$ curl https://start.spring.io/starter.zip \
-d bootVersion=2.4.4 \
-d baseDir=provider \
-d dependencies=web > provider.zip
$ unzip provider.zip && rm provider.zip
# 服务消费方
$ curl https://start.spring.io/starter.zip \
-d bootVersion=2.4.4 \
-d baseDir=consumer \
-d dependencies=web > consumer.zip
$ unzip consumer.zip && rm consumer.zip
1.2 添加Feign和Spring Cloud依赖
在服务提供方和消费方的pom.xml
文件中,添加以下依赖:
<!-- 服务提供方 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 服务消费方 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.3 创建服务提供方API和实现类
我们在服务提供方中创建一个简单的API,提供一个返回字符串的方法。
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello() {
return "Hello";
}
}
1.4 创建服务消费方API和实现类
我们在服务消费方中创建一个FeignClient
,用于调用服务提供方的API。
@FeignClient(name = "provider", url = "http://localhost:8080")
public interface HelloClient {
@GetMapping("/hello")
String hello();
}
2. 整合Feign
2.1 创建@EnableFeignClients注解
为了使Spring能够自动配置Feign客户端,我们需要在服务消费方中添加@EnableFeignClients
注解。
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
2.2 调用服务提供方API
我们在服务消费方中调用服务提供方的API,直接使用HelloClient
接口中定义的方法即可。
@RestController
public class HelloController {
@Autowired
private HelloClient helloClient;
@GetMapping("/hello")
public String hello() {
return helloClient.hello();
}
}
3. 示例
下面我们通过两个示例,进一步了解如何使用Feign进行跨服务调用。
3.1 示例1:服务提供方提供随机数API
我们在服务提供方中添加一个返回随机数的API,代码如下:
import java.util.Random;
@RestController
@RequestMapping("/random")
public class RandomController {
@GetMapping
public int random() {
return new Random(System.currentTimeMillis()).nextInt();
}
}
我们在消费方通过Feign来调用该API,代码如下:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "provider", url = "http://localhost:8080")
public interface RandomClient {
@GetMapping("/random")
int random();
}
我们在服务消费方的控制器中注入RandomClient
,并调用其中的方法,如下所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RandomController {
@Autowired
private RandomClient randomClient;
@GetMapping("/random")
public int random() {
return randomClient.random();
}
}
3.2 示例2:服务提供方提供计算API
我们在服务提供方中添加一个接收两个数值参数,并返回它们的和的API,代码如下:
@RestController
@RequestMapping("/calc")
public class CalcController {
@GetMapping
public int calc(int a, int b) {
return a + b;
}
}
我们在消费方通过Feign来调用该API,代码如下:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "provider", url = "http://localhost:8080")
public interface CalcClient {
@GetMapping("/calc")
int calc(@RequestParam("a") int a, @RequestParam("b") int b);
}
我们在服务消费方的控制器中注入CalcClient
,并调用其中的方法,如下所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CalcController {
@Autowired
private CalcClient calcClient;
@GetMapping("/calc")
public int calc(@RequestParam int a, @RequestParam int b) {
return calcClient.calc(a, b);
}
}
至此,我们完成了整合Feign跨服务调用的过程,同时通过两个示例进一步了解了如何使用Feign进行跨服务调用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从零开始学springboot整合feign跨服务调用的方法 - Python技术站