[英]Spring Integration Aggregator or Router the right pattern?
我有一个szenario,乍一看似乎非常适合使用Spring Integration Aggregator:
目前生成了大量的PDF报告。 这些通过Printrequests打印到JMS队列。 打印服务器接受带有打印请求的客户端套接字。
为了在负载方面实现某种“公平”,我们希望聚合同一台打印机的打印请求。 然后将聚合请求发送到打印服务器。 我们对聚合请求具有完整性标准,基本上是为“批处理”生成的pdf数量,并且每个“批处理”请求的PDF报告也具有唯一密钥。 然后,聚合的请求将通过服务激活器通过相同的客户端套接字“发送”到打印服务器。 所以基本上我们采用Spring Integration Documentation中描述的方法。
问题是:报告只会在生成“批次”的最后一个pdf报告时开始打印,这似乎会产生相当大的瓶颈。
理想情况下,我们可以在MessageGroup的第一条消息到达时立即开始打印,并有效地聚合打印请求的结果。
我一直在想用自定义的MessageStore实现这个目的
public void add(Message<?> messageToAdd)
方法实现附加逻辑调用打印机服务器并实际聚合服务器的响应。 像“活跃”的MessageStore之类的东西。
但是自定义MessageStore的add方法可能是一个“大”的瓶颈......阻止每个添加到“活动”的MessageStore ......而且看起来也是错误的metapher:Store vs Processing。
聚合器是否适合这些要求?
或者我应该更多地采用Dynamic Ftp Spring Integration Example中描述的动态路由器通道的方法
对于每个“批量”打印请求,有一个子/父应用程序上下文? 在那里,childs applicationcontext的生命周期对我来说并不是那么清楚。
理想情况下,我将能够使用JMX管理所有上下文 - 子项和父项,如Spring Integration的监视示例中所述
看起来你有一些奶油猫悖论 。
您希望通过聚合请求最小化网络负载,但同时您希望从聚合器发送每个项目以进行打印。
你应该自己决定你的目标是什么。
也许您只需要一个逻辑router
,该逻辑将基于某个key
委托给特定套接字的正确通道发送到打印服务器?
对不起抱歉:你的问题不明确......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.