Spring Batch集成:使用jms数据时提高吞吐量

时间:2018-12-07 12:42:27

标签: spring design-patterns spring-integration spring-batch

我从事的工作需要:

  1. 使用来自JMS的数据;
  2. 处理它;
  3. 将其加载到数据库中。

the documentation suggests

  1. 我从<int-jms:message-driven-channel-adapter channel="CHANNEL1" ... />开始向JMS频道发送新的CHANNEL1消息;
  2. 我使用the transformer来将消息从CHANNEL1通道转换为JobLaunchRequest,并执行一项工作,即将数据插入数据库以及包含原始JMS消息有效负载的有效负载;
  3. 转换后的消息进入CHANNEL2频道;
  4. <batch-int:job-launching-gateway request-channel="CHANNEL2"/>在频道中出现新消息时开始执行新的作业;

问题是,每次收到新的jms消息时,我都会启动一个新的数据库事务。

问题:我应该如何处理这样的流程?常见的模式是什么?

更新

我为每条消息开始工作。一条消息包含一个数据。如果我只使用spring-batch,那么我将不得不管理某种轮询器(如果我错了,请更正我),但是我想应用一种(两种)消息驱动的方法:

  1. 宽限期:当收到新消息时,我等待10多条消息或开始处理收到第一条消息后10秒钟收到的所有内容。
  2. 在通知队列包含新消息后,我只是读取了JMS队列中包含的所有内容。

当然,我希望解决方案是跨国的:消息处理的顺序无关紧要。

1 个答案:

答案 0 :(得分:1)

BatchMessageListenerContainer可以在您的用例中使用。它支持在单个事务中批处理消息。

请注意,该类不是主框架的一部分,它实际上是一个测试类,但是您可以根据需要使用它。

希望这会有所帮助。