WebSphere Camel JMS、spring、taskExecutor、haninging 线程 [英] WebSphere Camel JMS, spring, taskExecutor, haninging Threads

查看:27
本文介绍了WebSphere Camel JMS、spring、taskExecutor、haninging 线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 Camel 与 WebSphere 集成.它工作正常,除了一件事.

I'm trying to integrate Camel with WebSphere. It is working fine, for all but one thing.

场景如下:JMS (WMQ) -> 路由/转换 -> BEAN(执行 JPA (OpenJPA1.2/DB2) 提交).

The scenario looks like: JMS (WMQ) -> routing/transformation -> BEAN (which does a JPA (OpenJPA1.2/DB2) commit).

为了能够插入 WAS 事务管理器和管理线程,我将工作管理器作为 taskExecutor 插入到骆驼中:

To be able to plug into WAS transaction manager and mangaed threads, I'm inserting the work manager as taskExecutor in camel:

<!-- Selected parts of the spring config -->  
<tx:jta-transaction-manager/>

<bean id="wasTaskExecutor"
  class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
  <property name="workManagerName" value="wm/default" />
</bean>

<bean id="camelTransactionRequired" class="org.apache.camel.spring.spi.SpringTransactionPolicy" depends-on="transactionManager">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
  <property name="connectionFactory" ref="connectionFactory"/>
  <property name="taskExecutor" ref="wasTaskExecutor"/>
  <property name="transacted" value="true"/>
  <property name="transactionManager" ref="transactionManager"/>
</bean>  

然后是一条路线,例如:

Then a route, something like:

from("jms:queue:MY.QUEUE")
   .transacted("camelTransactionRequired")
   .log(..)
   .bean(storeJPA);

这个 wasTaskExecutor bean 用于应用程序中的一个独立的 spring 消息侦听器(相同的 jms 提供程序,WMQ)以及预期的行为.

This wasTaskExecutor bean is used in one stand alone spring message listener (same jms provider, WMQ) in the application as well with expected behaviour.

部署/启动时,可以通过这种方式处理一条消息(下面的第一条日志行) - 然后线程开始挂起.

When deployed/started, ONE message can be processed this way (first log line below) - then threads starts to hang.

[5/12/12 22:14:55:890 CEST] 00000055 SystemOut O INFO routeFromBackend - 消息从队列拉到消息框

[5/12/12 22:14:55:890 CEST] 00000055 SystemOut O INFO routeFromBackend - Message pulled from queue to message box

[5/12/12 22:27:00:638 CEST] 00000031 ThreadMonitor W WSVR0605W:线程默认值:1"(0000001e)已活动 739306 毫秒,可能会挂起.服务器中总共有 1 个线程可能被挂起.在 java.lang.Object.wait(本机方法)在 java.lang.Object.wait(Object.java:196)在 com.ibm.ws.util.BoundedBuffer.waitPut_(BoundedBuffer.java:214)在 com.ibm.ws.util.BoundedBuffer.put(BoundedBuffer.java:324)在 com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1296)在 com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1100)在 com.ibm.ws.asynchbeans.WorkItemImpl$PoolExecuteProxy.run(WorkItemImpl.java:198)在 com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool(WorkItemImpl.java:219)在 com.ibm.ws.asynchbeans.WorkManagerImpl.queueWorkItemForDispatch(WorkManagerImpl.java:433)在 com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:1074)在 com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:846)在 org.springframework.scheduling.commonj.WorkManagerTaskExecutor.execute(WorkManagerTaskExecutor.java:154)在 org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:669)在 org.springframework.jms.listener.AbstractJmsListeningContainer.resumePausedTasks(AbstractJmsListeningContainer.java:536)在 org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:285)在 org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:263)在 org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:555)在 org.apache.camel.component.jms.JmsConsumer.startListenerContainer(JmsConsumer.java:84)

[5/12/12 22:27:00:638 CEST] 00000031 ThreadMonitor W WSVR0605W: Thread "Default : 1" (0000001e) has been active for 739306 milliseconds and may be hung. There is/are 1 thread(s) in total in the server that may be hung. at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:196) at com.ibm.ws.util.BoundedBuffer.waitPut_(BoundedBuffer.java:214) at com.ibm.ws.util.BoundedBuffer.put(BoundedBuffer.java:324) at com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1296) at com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1100) at com.ibm.ws.asynchbeans.WorkItemImpl$PoolExecuteProxy.run(WorkItemImpl.java:198) at com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool(WorkItemImpl.java:219) at com.ibm.ws.asynchbeans.WorkManagerImpl.queueWorkItemForDispatch(WorkManagerImpl.java:433) at com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:1074) at com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:846) at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.execute(WorkManagerTaskExecutor.java:154) at org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:669) at org.springframework.jms.listener.AbstractJmsListeningContainer.resumePausedTasks(AbstractJmsListeningContainer.java:536) at org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:285) at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:263) at org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:555) at org.apache.camel.component.jms.JmsConsumer.startListenerContainer(JmsConsumer.java:84)

有人看过吗?

推荐答案

线程挂起"等待提交工作到满队列,工作管理器配置为在队列满时阻塞而不是抛出错误.要解决挂起",要么增加工作管理器线程池中的线程数,要么将队列已满操作更改为错误"而不是等待".或者,调查提交给工作经理的工作项是否由于某种原因花费了太长时间.

The thread is "hung" waiting to submit work to a full queue, and the work manager is configured to block rather than throw an error when the queue is full. To resolve the "hang", either increase the number of threads in the work manager thread pool, or change the queue full action to be "error" rather than "wait". Alternatively, investigate if the work items being submitted to the work manager are taking too long for some reason.

这篇关于WebSphere Camel JMS、spring、taskExecutor、haninging 线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆