在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 WebFlux构建反应式微服务,并结合Spring Cloud进行服务发现(Eureka)、服务间通信(WebClient)以及构建API网关(Spring Cloud Gateway)。通过示例,展示了从数据库集成到测试的完整流程,重点讨论了反应式编程在微服务架构中的应用。
最低0.47元/天 解锁文章
2584

被折叠的 条评论
为什么被折叠?



