当前位置: 首页 > 知识库问答 >
问题:

如何控制spring远程批处理从机

丌官向荣
2023-03-14
<bean id="ourTaskExecutor" class="...ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="16" />
    <property name="maxPoolSize" value="16" />
    <property name="queueCapacity" value="256" />
</bean>

<int-jms:inbound-channel-adapter 
    id="JobJmsRequests" 
    connection-factory="jmsConnectionFactory"
    channel="requests.chunking" 
    destination-name="requests.chunking" >
        <int:poller task-executor="ourTaskExecutor" 
            fixed-delay="50" 
            max-messages-per-poll="4" 
            receive-timeout="50"/>
</int-jms:inbound-channel-adapter>

<int-jms:outbound-channel-adapter 
    id="JobJmsReplies" 
    connection-factory="jmsConnectionFactory" 
    destination-name="replies.chunking" 
    channel="replies.chunking"/>

<int:service-activator 
    id="JobActivator" 
    input-channel="requests.chunking" 
    output-channel="replies.chunking" 
    ref="JobChunkHandler" method="handleChunk"/> 

我们的假设是poller会将接收到的消息交给task executor进行处理,但是task executor中的消息不会超过64条,而task executor可以容纳256+16条消息。

然而,我们看到异常,队列容量已经达到,任务执行器拒绝任务。我们认为这是因为任务执行器仅由轮询器使用,并在轮询线程上处理获得的请求。由于处理需要很长时间,我们慢慢地用轮询任务淹没任务执行器。并在单个线程中处理它们接收到的所有内容)。

我们不能完全解释泛洪,因为我们使用了receivetimeout和延迟,所以我们的理解是,应该在触发新的轮询之前进行处理。然而,情况似乎并非如此。

我们希望在不同的线程上轮询和执行消息。这可能吗?如何实现?

共有1个答案

长孙朝明
2023-03-14

使用caller-runs或caller-blocksRejectedExecutionHandler

也就是说,您不想要内存中的块--它们将在系统故障时丢失。

应使用消息驱动的入站通道适配器,其并发性设置为要处理的并发块数。

 类似资料:
  • 我在同一jboss应用服务器中部署了两个WAR:- WAR1-->拥有作业启动程序和作业相关服务 我对spring batch(WAR1)和spring batch admin(WAR2)都使用了相同的DB存储库。 我可以通过使用Spring Batch Admin访问所有与作业相关的状态,但我遇到了如何触发WAR1中部署的作业的问题, 我也可以用下面的URL在WAR1中创建rest Web服务

  • 我正在使用jhipster,我想在我的WebApp中集成spring批处理管理控制台。(例如http://localhost:8080/batch-console) 我尝试在我的jhipster webapp中集成以下响应,有没有一种方法可以正确地集成spring-batch-admin和spring-boot?但我得到以下错误(属性似乎未加载) Spring Boot版本:1.4.1.发布Jhi

  • 我们在POC中使用远程分区,处理大约2000万条记录。为了处理这些记录,slave需要一些大约5000行的静态元数据。我们当前的POC使用EhCache从数据库一次将元数据加载到从机中,并将其放入缓存中,这样子用户调用就可以从缓存中获取这些数据,从而获得更好的性能。 现在,由于我们使用远程分区,我们的从机大约有20个MDP/线程,因此每个消息侦听器首先调用以从数据库获取元数据,因此基本上每个远程机

  • 试着看看我是否能设计一个既需要分区又需要远程分块的工作。我们可以有类似于表A的东西来保存行(表A中的一列将是分区键),对于表A中的每一行,我们将有表B,其中包含表A中给定外部/分区键的许多子记录。我们需要运行一个查询,根据查询过滤表a中的分区键,并为每个分区键处理表B中的所有子记录(这里我们在表B中也会有数百万条记录,因此我们需要并行处理记录,从而实现远程分块) 对于这样的事情,什么是正确的思考s

  • spring批处理远程分块和远程分区之间有什么区别? 我无法理解spring batch中远程分块和远程分区之间的区别。谁能解释一下吗?

  • 嗨,我有下面的xml,用于执行作业 为此,我编写了一个tasklet来执行脚本。现在我希望,如果脚本执行失败三次,那么下一步将不会执行。但是从Tasklet中,我只能返回将流程转移到下一个步骤的完成和继续过程的可持续。我在这该怎么办。