JMS主题订阅Tomee 1.7.1

标签 jms activemq apache-tomee jms-topic

我正在尝试使用消息驱动 Bean,以便从外部 ActiveMQ 实例接收主题订阅消息。

我的测试首先从队列订阅开始,效果非常好。

然后我想尝试主题订阅,但无法使其正常工作。

这就是我所拥有的:

conf/tomee.xml

<tomee>
    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
        BrokerXmlConfig  =
        ServerUrl = tcp://192.168.1.176:61616
    </Resource>

    <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
        ResourceAdapter = MyJmsResourceAdapter
    </Resource>

    <Container id="MyJmsMdbContainer" ctype="MESSAGE">
        ResourceAdapter = MyJmsResourceAdapter
    </Container>

    <Resource id="MyQueue" type="javax.jms.Queue"/>
    <Resource id="MyTopic" type="javax.jms.Topic"/>
</tomee>   

这是 MDB:

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(mappedName = "MyTopic", activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") 
    }
)
public class TestMDBTopic implements MessageListener {

    public TestMDBTopic() {
        super();
    }

    public void onMessage(Message message) {
        System.out.println("TOPIC\tMESSAGE: " + message);

    }

}

我不知道为什么,但从日志中我可以看到 TomEE 创建了一个队列而不是主题:

Nov 19, 2014 11:17:00 PM org.apache.openejb.config.AutoConfig logAutoCreateResource
INFO: Auto-creating a Resource with id 'MyTopic' of type 'javax.jms.Queue for 'TestMDBTopic'.

另一个证据是,当我添加持续时间配置时,服务器将不会启动:

@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")

服务器然后提示这不适合配置的类型 javax.jms.Queue。

我还尝试用一个愚蠢的简单邮件方法创建一个 TopicConsumer ,该方法运行良好。 此外,当我从整个配置文件中删除队列配置 (MyQueue) 时,这不会产生任何影响。

有人知道我做错了什么吗?

最佳答案

我遇到了完全相同的问题。我通过删除 @MessageDriven 注释中的mappedName 属性解决了该问题。 Tomee 必须关闭mappedName 并假设它代表队列目的地。无论如何,我现在可以向该主题发送消息,并且它们由监听器使用。

关于JMS主题订阅Tomee 1.7.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028739/

相关文章:

spring-boot - Spring JMS 监听器确认

java - 查询 ActiveMQ 队列的峰值大小

Spring 事件与 ActiveMQ

java - 使用 OWB 在 TomEE 上部署 Wicket CDI

java - 微简介|配置 - 使用动态值进行测试

java - 如何在 Spring Boot 中访问 @JmsListener 使用的 Activity JMS 连接/ session

java - ActiveMQ 故障转移传输 - 为什么有这么多连接?

windows-services - 无法在 Windows 2008 r2 下将 activemq 作为服务启动

apache-flex - Tomcat/BlazeDS/ActiveMQ 断开连接问题

java - 消息驱动的 bean 和超时中的长时间运行任务