文章目录
- 一、Nacos 部署
- 1.1 启动 Nacos Server
- 1.2 启用 Nacos 控制台
- 二、微服务设置
- 2.1 导入依赖
- 2.2 创建微服务
- 2.3 `application.yml` 配置
- 三、创建微服务
- 3.1 启用客户端
- 3.2 创建 Feign 代理对象
- 3.3 测试远程调用服务
- 参考案例
完整示例代码参考: java-demos/spring-cloud-openfeign at main · idealzouhu/java-demos (github.com)
一、Nacos 部署
1.1 启动 Nacos Server
docker run ^
-d -p 8848:8848 ^
-p 9848:9848 ^
--name nacos-test ^
-e MODE=standalone ^
-e TIME_ZONE='Asia/Shanghai' ^
nacos/nacos-server:v2.1.2
部分指令的含义如下:
-e MODE=standalone
: 使用环境变量MODE
设置 Nacos 的启动模式。这里设置为standalone
模式,意味着单机模式运行(适合开发环境使用)。在生产环境中,通常会配置为集群模式。-e TIME_ZONE='Asia/Shanghai'
: 设置容器内的时区为Asia/Shanghai
,即中国标准时间(CST,东八区)
1.2 启用 Nacos 控制台
运行成功,稍等几秒启动时间,浏览器输入 http://localhost:8848/nacos/index.html 查看控制台。
二、微服务设置
2.1 导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2.2 创建微服务
创建多个微服务Order Service、Payment Service 和 Notification Service。这些微服务将通过 Nacos 进行服务注册和发现,它们之间有特定的关系和交互方式。
不同微服务之间的关系为:
- Order Service 处理用户的订单,并在订单创建时调用 Payment Service 来处理支付。
- Payment Service 处理支付请求,并在支付成功时调用 Notification Service 发送通知。
- Notification Service 负责发送通知,例如订单状态更新通知
2.3 application.yml
配置
除了 spring.application.name
和 server.port
, 不同微服务之间的配置基本上差不多。
spring:
application:
name: order-service
cloud:
nacos:
# nacos 注册中心
discovery:
server-addr: 127.0.0.1:8848 # nacos 注册中心地址
namespace: public
server:
port: 9000
三、创建微服务
由于这些微服务的代码基本类似,本文只展示如何创建 Order Service 。
3.1 启用客户端
使用 @EnableDiscoveryClient
。
注意:如果不使用 @EnableDiscoveryClient
注解的话,@FeignClient
注解将无法使用。
@SpringBootApplication
@EnableFeignClients(basePackages = "com.zouhu.orderservice.remote")
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
3.2 创建 Feign 代理对象
使用注解 @FeignClient
创建代理对象。
@FeignClient(name = "pay-service") // 定义一个 Feign 客户端接口,用于远程调用其他服务
public interface PayRemoteService {
// 定义远程调用方法
@GetMapping("/pay/process")
String processPayment();
}
3.3 测试远程调用服务
在运行所有微服务后,运行 http://localhost:9000/order/create
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private PayRemoteService payRemoteService;
/**
* 创建订单并调用支付服务
* <p>
* 调用方法链接: http://localhost:9000/order/create
* Nacos控制台访问链接: http://localhost:8848/nacos/index.html
* </p>
*
* @return
*/
@GetMapping("/create")
public String createOrder() {
String paymentStatus = payRemoteService.processPayment();
return "Order created! Payment status: " + paymentStatus;
}
}
参考案例
Spring Cloud OpenFeign 中文文档 (springdoc.cn)
Nacos Docker 快速开始 | Nacos 官网