我的應用程序正在通過Jms MessageListener類讀取消息,並在某個時間點拋出TaskRejectedException。我知道你們大多數人會說線程的數量超過maxPoolSize並且隊列也已滿。ThreadPoolExecutor :: Executor的TaskRejectedException
但我觀察到了一些東西。發送到從該消息監聽類中提取的消息是10353的隊列和我的ThreadPoolExecutor的彈簧特性的消息的數量低於:
<bean id="ticketReaderThreadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton" destroy-method="destroy">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="150" />
<property name="queueCapacity" value="11000" />
</bean>
現在根據我的maxPoolSize比足以應付這麼多的要求更。所以如果你們中的任何人都可以給出一個除maxPoolSize違規外的理由,那麼請這樣做。
我們現在第二次面臨這個問題,以前我們已經嘗試過增加maxPoolSize,但15天后我們再次遇到這種情況,每天大約有5000到8000次。
更新:
這是異常的全部堆棧跟蹤:在從隊列/讀出處理的消息 org.springframework.core.task.TaskRejectedException發生
一般例外: Executor [[email protected]]不接受任務:[email protected] at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:244) 在com.batman.rapid.rapidserver.sla.JmsTicketReceiver.onMessage(JmsTicketReceiver.java:58) 在org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560) 在org.springframework.jms。 listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498) 在org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467) 在org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java: 325) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263) at org.springfram ework.jms.listener.DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058) 在org.springframework.jms.listener.DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050) 在org.springframework.jms.listener。使用DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947) 在java.lang.Thread.run(Thread.java:662) 產生的原因:在java.util.concurrent.ThreadPoolExecutor中的$ AbortPolicy java.util.concurrent.RejectedExecutionException .rejectedExecution(ThreadPoolExecutor.java:1774) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:768) at java.util.concurrent.ThreadPoolExecutor.ex ecute(ThreadPoolExecutor.java:656) at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:241) ...10多
這是相關代碼:
if (message instanceof TextMessage)
{
textMessage = (TextMessage) message;
ticketReaderThreadPool.execute(new TicketHandler(textMessage.getText()));
}
下面是請求的配置:
<!-- End of JMS Queue Support -->
<bean id="ticketReaderThreadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton" destroy-method="destroy">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="150" />
<property name="queueCapacity" value="11000" />
</bean>
<bean id="notificationThreadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton" destroy-method="destroy">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="10000" />
</bean>
<bean id="notificationManager" class="com.batman.rapid.rapidserver.sla.scheduler.NotificationManager" scope="singleton">
<property name="defaultPercent" value="80"></property>
</bean>
<bean id="dbUpdateThreads" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton" destroy-method="destroy">
<property name="corePoolSize" value="1" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="10000" />
</bean>
我們可以看到完整的JMS配置中的任何鎖? –
我沒有得到你。請提供您的要求的詳細信息。 –
我們希望看到相關的spring jms配置文件。 –