JMS 主题订阅 Tomee 1.7.1

Posted

技术标签:

【中文标题】JMS 主题订阅 Tomee 1.7.1【英文标题】:JMS Topic subscription Tomee 1.7.1 【发布时间】:2015-01-17 16:09:37 【问题描述】:

我正在试验消息驱动 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) 时,这并没有什么不同。

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

【问题讨论】:

【参考方案1】:

我遇到了完全相同的问题。我通过删除 @MessageDriven 注释中的 mappedName 属性解决了这个问题。 Tomee 必须关闭 mappedName 并假设它表示队列目标。无论如何,我现在可以向主题发送消息,并且它们会被听众消费。

【讨论】:

以上是关于JMS 主题订阅 Tomee 1.7.1的主要内容,如果未能解决你的问题,请参考以下文章

JMS 主题发布/订阅者

WSO2 ESB 5.0.0 配置 JMS 传输(ActiveMQ)- 主题消息发布与订阅

WSO2 ESB 5.0.0 配置 JMS 传输(ActiveMQ)- 主题消息发布与订阅

WSO2 ESB 5.0.0 配置 JMS 传输(ActiveMQ)- 主题消息发布与订阅

activemq、jms 主题和带有选择器的订阅者

Apache ActiveMQ教程二 (消息主题订阅)