gpt4 book ai didi

java - HornetQ 队列事务超时

转载 作者:行者123 更新时间:2023-11-30 08:18:42 27 4
gpt4 key购买 nike

我使用 EJB 来实现命令模式。 EJB 是执行业务逻辑的命令服务。我知道在 J2EE 中 EJB 管理事务以及事务超时。

<subsystem xmlns="urn:jboss:domain:transactions:1.1">
<core-environment>
<process-id>
<uuid/>
</process-id>
</core-environment>
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
<coordinator-environment default-timeout="600"/>
</subsystem>

如我所示的配置,事务是受管理的,并且只允许最多 600 秒的处理时间。有时,我的应用程序处理数据库的时间超过 600 秒,之后我尝试向队列发送消息,但收到此错误。

21:34:50,085 ERROR [org.hornetq.ra.HornetQRASessionFactoryImpl] (Thread-102) Could not create session: javax.resource.ResourceException: IJ000460: Error checking for a transaction
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:362)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:837)
at org.hornetq.ra.HornetQRASessionFactoryImpl.createQueueSession(HornetQRASessionFactoryImpl.java:237)
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_24]
Caused by: javax.resource.ResourceException: IJ000459: Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffff0a01071e:2dde2ba2:5514d7c5:d1 status: ActionStatus.ABORTED >
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:352)
... 63 more

21:34:50,117 ERROR [stderr] (Thread-102) javax.jms.JMSException: Could not create a session: IJ000460: Error checking for a transaction

21:34:50,118 ERROR [stderr] (Thread-102) at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:881)

21:34:50,119 ERROR [stderr] (Thread-102) at org.hornetq.ra.HornetQRASessionFactoryImpl.createQueueSession(HornetQRASessionFactoryImpl.java:237)

我可以通过增加事务超时值来解决它。但这不是一个好的解决方案。任何人都可以告诉我另一种方法。

最佳答案

第一步,尝试将工作负载划分为更小的 block - 每个 block 都依赖于容器管理事务。

如果根本不可行;那么你可以考虑使用Bean Managed Transactions。

关于java - HornetQ 队列事务超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com