【发布时间】:2017-01-18 19:29:05
【问题描述】:
我有一个场景,乍一看似乎非常适合使用 Spring Integration Aggregator:
目前产生了大量的 PDF 报告。这些通过 Printrequests 打印到 JMS 队列。打印服务器接受带有打印请求的客户端套接字。
为了在负载方面达到一定的“公平性”,我们希望对同一台打印机的打印请求进行聚合。然后将聚合请求发送到打印服务器。我们有聚合请求的完整性标准,基本上是为“批次”生成的 pdf 数量,并且每个“批次”请求的 PDF 报告都有一个唯一键。然后,聚合的请求将通过服务激活器通过相同的客户端套接字“发送”到打印服务器。所以基本上我们采用的是 Spring Integration Documentation 中描述的方法。
问题:报告只会在“批处理”的最后一个 pdf 报告生成时才开始打印,这似乎造成了相当大的瓶颈。
理想情况下,我们可以在 MessageGroup 的第一个 Message 到达时立即开始打印,并有效地聚合打印请求的结果。
我一直在考虑使用自定义 MessageStore 来实现这一点,其中
public void add(Message<?> messageToAdd)
方法实现了额外的逻辑调用打印机服务器并实际聚合服务器的响应。类似于“活动”的 MessageStore。
但是自定义 MessageStore 的 add 方法可能是一个“大”瓶颈...阻止每个添加到“活动”MessageStore...而且似乎是错误的比喻:存储与处理某些东西。
聚合器是满足这些要求的正确方法吗?
或者我应该更多地使用Dynamic Ftp Spring Integration Example中描述的动态路由器通道
每个“批次”打印请求都有一个子/父应用程序上下文? 那里孩子的应用程序上下文的生命周期对我来说不是很清楚。
理想情况下,我将能够使用 JMX 管理所有上下文 - 孩子和父母,如 the Monitoring Example of Spring Integration 中所述
【问题讨论】: