Java:从Play Framework应用程序使用Spring WebFlux应用程序

时间:2019-05-11 22:39:32

标签: java playframework microservices reactive-programming spring-webflux

我对通过HTTP从Play Framework应用程序使用Spring WebFlux应用程序有一些疑问,请问您能提供一些帮助吗?

微服务A是一个响应式Spring WebFlux,用Java 8,SpringBoot 2.1.4编写,它公开了以下API:

@Autowired private ReactiveCustomerRepository customerRepository;

@GetMapping("/customers")
public Flux<Customer> getAllCustomers() {
    Flux<Customer> c = customerRepository.findAll().delayElements(Duration.ofMillis(5000));
    return c;
}

我想通过HTTP从Play Framework微服务B以一种反应方式来使用它。

能否请您提供一些建议或一小段代码来实现此目的?

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用支持流传输的其他内容类型-application/stream+json。 Spring WebFlux将序列化单个Flux元素,并通过网络将其一一发送。查看有关此内容的以下SO线程:Spring WebFlux Flux behavior with non streaming application/json

在play-ws端,您应该能够以Source[T]的形式接收此数据。

答案 1 :(得分:0)

我不是该领域的专家,但会根据我的经验尝试形成建设性意见。

考虑到Spring Webflux / Play框架这两个独立的反应式微服务的观点,它们都向我们提出了一个非阻塞/并发客户端的概念,用于发出HTTP请求。这些协议与协议无关,将响应性原则保留在各自环境中,在该环境中,每个HTTP请求将被异步处理,并且独立于阻止应用程序的执行。因此,我寻求HTTP本身的瓶颈,而不是WebFlux <-> Play之间的良好连接。

我建议寻找一种更好的替代纯HTTP的通信替代方法,以支持HTTP / 2和/或RPC(尤其是微服务通信之间的封闭/独立环境)。

这些出版物可能会有用:

GRPC - A high performance, open-source universal RPC framework甚至更具扩展性。

这些就是我真正连接两个反应式微服务的反应式的观点。否则,它与标准HTTP GET请求没有什么不同。欢迎在评论中接受建设性的批评。