使用Spring WebFlux和Spring Cloud的反应式微服务

本文介绍了如何使用Spring WebFlux构建反应式微服务,并结合Spring Cloud进行服务发现(Eureka)、服务间通信(WebClient)以及构建API网关(Spring Cloud Gateway)。通过示例,展示了从数据库集成到测试的完整流程,重点讨论了反应式编程在微服务架构中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Spring5正式发布之后,值得一看它的当前版本。此外,我们将尝试将我们的反应式微服务放在Spring云生态系统中,该生态系统包含诸如Eureka的服务发现、Spring Cloud Commons@LoadBalanced的负载平衡以及使用Spring Cloud gateway的API gateway(也基于WebFlux和Netty)等元素。我们还将通过SpringDatareactiveMongo项目的示例来检查Spring对NoSQL数据库的响应式支持。

下图展示了示例系统的体系结构,该体系结构由两个微服务组成:discovery server、gateway和MongoDB数据库。源代码与往常一样可以在GitHub的SpringCloudWebFlux示例库中获得。

让我们描述创建上述系统的进一步步骤。

第一步. 使用SpringWebFlux构建反应式应用程序

要为项目启用库SpringWebFlux,我们应该在依赖项中包含 spring-boot-starter-webflux 。它包括一些依赖库,如Reactor或Netty服务器。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

REST控制器看起来非常类似于为同步web服务定义的控制器。唯一的区别在于返回对象的类型。我们返回的不是单个对象,而是 Mono 类的实例,我们返回的不是 list 类的实例,而是 Flux 类的实例。多亏了 SpringDataResponsiveMongo ,我们不必在存储库bean上调用所需的方法。

@RestController
public class AccountController {

   private static final Logger LOGGER = LoggerFactory.getLogger(AccountController.class);

   @Autowired
   private AccountRepository repository;

   @GetMapping("/customer/{customer}")
   public Flux findByCustomer(@PathVariable("customer") String customerId) {
      LOGGER.info("findByCustomer: customerId={}", customerId);
      return repository.findByCustomerId(customerId);
   }

   @GetMapping
   public Flux findAll() {
      LOGGER.info("findAll");
      return repository.findAll();
   }

   @GetMapping("/{id}")
   public Mono findById(@PathVariable("id") String id) {
   LOGGER.info("findById: id={}", id);
      return repository.findById(id);
   }

   @PostMapping
   public Mono create(@RequestBody Account account) {
      LOGGER.info("create: {}", account);
      return repository.save(account);
   }

}

第二步. 使用Spring Data Mongo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值