【问题标题】:Message is not removed/ not auto acknowledged from HornetQ消息未从 HornetQ 删除/未自动确认
【发布时间】:2014-09-15 16:28:23
【问题描述】:

我第一次使用 Jboss 7.2 并尝试部署一个简单的 MDB 。 MDB 被注释为自动确认

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "/queue/test")
    })
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@TransactionManagement(value= TransactionManagementType.CONTAINER)
public class TextMessageListener implements MessageListener {

onMessage 很简单,只是睡觉和醒来。我的期望是消息一旦被 MDB 消费,即 onMessage 被调用,它应该从队列中删除。但是消息会一直留在队列中,直到 onMessage 完成并且状态显示为“In Delivery”。

public void onMessage(Message message) {
    System.out.println("sleeping for some time");
    try {
        Thread.sleep(10*60000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("awake and done now");
}

当 on-message 完成时,日志显示确认在完成后发送,因此在 onMessage 完成后从队列中删除消息。一些愚蠢的配置,因为它很简单。 ..但知道缺少什么。如何在 JBOSS 7.2 MDB 中设置自动确认,以便在调用 onMessage 后立即自动确认消息。

15:59:33,584 INFO  [stdout] (Thread-3 (HornetQ-client-global-threads-467768789)) awake and done now


15:59:33,586 DEBUG [org.hornetq.core.client] (Thread-3 (HornetQ-client-global-threads-467768789)) client ack messageID = 1079

这是一件简单直接的事情,但它没有按预期工作。我们尝试使用消费者(一个独立的 java 测试客户端从队列中读取消息)并在那里工作。

一旦消息被消费者消费,即使消息正在由消费者处理但不在 MDB 中,它也会从队列中删除。

有什么想法吗?

我曾尝试在 JBoss 社区提出同样的问题,但没有成功。希望有人会在这里回答..

提前致谢。

【问题讨论】:

  • 你能从上面的代码连接到队列吗?
  • 是的,当然。 MDB 已连接,获取消息,在 onMessage 期间休眠,然后醒来。如果您看到我发布的日志 stmt - "awake and done now" 。并且在此消息从队列中删除之后,而如果我从独立的消费者中读取消息,则消息在消费者阅读后立即被删除。
  • 这个有什么更新吗?
  • 不。没有得到任何东西。我们从 MDB 变成了消费者 :(

标签: java jboss hornetq jboss-mdb


【解决方案1】:

我在 Glassfish (v4.0) 上尝试了类似的东西,并注意到我的 mdb 部署有问题(我有一个验证程序正在运行)。 glassfish 日志文件抱怨“自动确认”的属性值无法识别。我做了以下更改,然后它起作用了:

更改自:propertyValue = "auto-acknowledge")

更改为:propertyValue = "Auto-acknowledge")

注意大小写 - 已更改以匹配 ejb3.2 规范中的列表(第 5.4.16.1 节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2013-05-18
    • 1970-01-01
    • 2012-04-28
    • 2014-02-02
    • 2014-09-26
    相关资源
    最近更新 更多