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

Artemis ActiveMQ+MDB长时间工作:在重新交付之前等待多长时间

蒯翰墨
2023-03-14

这个时间是可配置的吗?

谢了!

        <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
            <server name="default">
                <in-vm-connector name="in-vm" server-id="0"/>
                <in-vm-acceptor name="in-vm" server-id="0">
                    <param name="buffer-pooling" value="false"/>
                </in-vm-acceptor>
                <jms-queue name="MyJobsQueue" entries="java:/jms/MyJobsQueue" />
                <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="none" pre-acknowledge="true"/>
            </server>
        </subsystem>
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "MyJobsQueue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "5")
})
public class MyJobsListener implements MessageListener {

    //new logger.....
    
    @Override
    public void onMessage(Message m) {
        try {
            logger.info("Received message ({}) (Redelivered:{})", m.getJMSMessageID(), m.getJMSRedelivered());
            
            Thread.sleep(10 * 60 * 1000);
        } catch (InterruptedException e) {
        }
    }
}
2020-11-19 04:00:00 INFO - Received message (ID:5002ad76-2a13-11eb-bedf-005056b94ad2)  (Redelivered:false)
2020-11-19 04:05:00 INFO - Received message (ID:5002ad76-2a13-11eb-bedf-005056b94ad2)  (Redelivered:true)
2020-11-19 04:10:00 INFO - Received message (ID:5002ad76-2a13-11eb-bedf-005056b94ad2)  (Redelivered:true)
2020-11-19 04:15:00 INFO - Received message (ID:5002ad76-2a13-11eb-bedf-005056b94ad2)  (Redelivered:true)
2020-11-19 04:45:24 INFO - Received message (ID:5002ad76-2a13-11eb-bedf-005056b94ad2)  (Redelivered:true)

共有1个答案

卫高明
2023-03-14

MDB(就像所有其他类型的EJB一样)隐式地支持JTA事务,一旦MDB接收到消息,事务就由容器启动。这样做是为了在处理消息时所做的任何事务性工作(例如更新数据库、发送另一个JMS消息等)都将成为使用消息本身的事务的一部分。通过这种方式,消息可以是一个“工作单元”。

因此,重要的是要注意WildFly中的默认事务超时是300秒(即5分钟)。一旦事务超时,消息将回滚到队列中,并可能重新传递。当然,重新交付的工作方式最终取决于代理的配置。

在任何情况下,您都可以通过使用以下注释禁用JTA事务来防止长时间运行的MDB出现此类问题:

@TransactionAttribute(NOT_SUPPORTED)
<coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}" default-timeout="600"/>
 类似资料:
  • 问题内容: 我正在使用ProcessBuilder类和Process类从Java执行一个.exe文件。解释我在做什么: 我只是想知道,“ waitFor()”等待了多长时间?是等待直到执行我的.exe,还是等到执行完成? 我的.exe是编译好的AutoIt脚本。这意味着,可能需要一些时间才能完成诸如鼠标移动之类的交互。因此,我需要知道在调用.exe之后我的Java代码执行是否继续进行,或者它是否真

  • 问题内容: 在服务器回答请求之前,浏览器需要等待多长时间才能显示错误?这次可以无限吗? 问题答案: 如果使用的是jQuery $ .ajax调用,则可以设置timeout属性以控制请求以超时状态返回之前的时间。超时设置为毫秒,因此只需将其设置为很高的值即可。您也可以将其设置为0(表示“无限”),但我认为您应该设置一个较高的值。 注意:“无限制” 实际上是默认设置,但大多数浏览器都有默认超时值。 当

  • Selenium C#在抛出超时异常之前等待的最大显式超时是多少? 有时我们正在测试的应用程序变得非常慢,最多需要4分钟才能加载。我想添加一个等待时间,这样它最多会等待5分钟。 我已经尝试过这个代码 但是它在2分钟左右抛出超时异常。

  • 我编写了一个方法IsElementPresent,无论是否显示元素,该方法都返回true/false。 这是我的方法 现在,有时它应该返回false,元素。在捕捉异常并返回false之前,显示等待了大约20秒(通过调试找到)。如果它找到元素,则工作正常。 我还将代码更改为: 现在同样的等待也发生在等待中。直到行。代码工作正常,但当它找不到元素时只是不必要的延迟。如何找到元素重要吗?当按类找到元素时

  • 问题内容: 我更新了一些插件并重新启动了詹金斯,但现在它说: Jenkins重新启动时,请等待 Jenkins准备就绪后,您的浏览器将自动重新加载。 这花费了太多时间(从最近的40分钟开始等待)。我只有一个约20个构建的项目。我已经重新启动了詹金斯很多次,并且工作正常,但是现在卡住了。有什么办法可以杀死/暂停詹金斯来避免这种等待吗? 问题答案: 使用jenkins内置重启功能时,我遇到了非常相似的

  • 问题内容: 我可以长时间等待Selenium Web Driver吗? 即使我可以像下面那样设置隐式等待命令,它也不会等待我给定的时间。 这里有什么问题吗? 就我而言,我需要执行一个测试用例并等待4分钟,然后执行下一个测试用例。 我在这里使用Java。 问题答案: 其实这不是我的答案,两天前我在这里看到了这个答案,但是我没有时间应用它。今天我尝试了,这就是我想要的。 不幸的是,现在我在这里看不到该