首页 > 解决方案 > 是否可以使轮询器(或 PollableMessageSource)将消息作为列表轮询?

问题描述

按照 GitHub https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-polling-binder-sample中的示例轮询来自 PubSub 订阅的消息,我想知道......

每次投票是否可以进行PollableMessageSource检索List<Message<?>>而不是一条消息?

我已经看到该@Poller符号仅用于Source类型化对象,从未用于Processoror Sink。例如,当使用@StreamListener或使用功能方法时,是否可以在这种情况下使用?

标签: spring-integrationspring-cloudspring-cloud-stream

解决方案


PollableMessageSource绑定和流Source应用程序完全基于 Spring Integration 的抽象,其中它的合同是为配置的通道生成单个消息。消息传递的重点实际上是处理不影响其他人的单个消息。一条消息的失败并不意味着流中的其他消息失败。PollerMessageSource

另一方面,您可能是指将 GCP Pub/Sub 消息作为 Spring 消息有效负载中的列表生成。这确实是可能的,但是通过来自 Pub/Sub 消费者和MessageSourceimpl 的一些自定义代码。尽管我会三思而后行,期望从源头上批量处理。如果您的进一步逻辑是关于作为列表处理,您可能会使用聚合器来构建一些小窗口。但同样:这将是一个单一的 Spring 消息。

开始考虑反应式函数实现可能会更好,您确实可以期望 aFlux<Message<?>>作为输入,Spring Cloud Stream 框架将照顾您如何将数据从 Pub/Sub 发送到您期望的反应式流中。

在文档中查看更多信息:https ://docs.spring.io/spring-cloud-stream/docs/3.1.0/reference/html/spring-cloud-stream.html#_reactive_functions_support


推荐阅读