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

JMS主题订阅Tomee 1.7.1

司马萧迟
2023-03-14

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

我的测试首先从队列订阅开始,它工作得很好。

然后我想尝试主题订阅,但我无法让它工作。

这就是我所拥有的:

会议记录。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.队列。

我还试着用一种愚蠢的简单邮件方法制作一个主题消费者,这种方法非常有效。此外,当我从整个配置文件中删除队列配置(MyQueue)时,这并没有什么区别。

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

共有1个答案

曾光远
2023-03-14

我遇到了完全相同的问题。我通过删除@MessageDriven注释中的mpse dName属性修复了这个问题。Tomee一定是在关闭mep dName并假设它代表一个队列目的地。无论如何,我现在可以向主题发送消息,并且它们被侦听器消耗。

 类似资料:
  • 目前,我已经开始使用ActiveMQ处理JMS主题。我已经通过JAVA代码(如下所述)创建了发布者和持久订阅者,并且在订阅者端也收到了消息。 Publisher.Java 订阅者.java 我对以下主题有一些疑问, 如何检查有多少订阅者使用 Java JMS 在主题中主动查找消息? 如何从主题中获取活动和持久订阅者列表? 我们是否可以删除主题中发布的消息? 在这些情况下帮助我。 提前致谢。

  • 我试图利用固有的WSO2ESB主题发布到jms队列。我已经创建了主题,并提供了一个订阅者URL:jms:/topictest?transport.jms.destinationtype=queue。然而,当我将消息发布到主题时,它不能被传递到队列。日志生成以下内容 “系统无法从jms:/queue?destination=topictest URL推断传输信息。” 另外,我似乎不知道如何发布到WS

  • 我有一个使用ActiveMQ的JMS生产者/订阅者的简单Spring应用程序,配置如下: 我试过所有可能的解决办法,但没有一个奏效。我们非常感谢任何帮助

  • 我在开发订阅MQ主题(MQ版本9)应用程序时遇到了问题。 我需要做一个共享主题连接,因为应用程序将在多个实例(集群)中运行。 规范和文档中说:“非持久共享订阅由一个客户端使用,该客户端需要能够在多个使用者之间共享从主题订阅接收消息的工作。因此,非持久共享订阅可能有多个使用者。来自订阅的每条消息将只传递给该订阅上的一个使用者。” 对我来说,所有使用相同订阅名称的客户端都在同一个“集群”中,一次只有一

  • 我正在尝试使用JMS在Azure Service Bus上创建非持久主题订阅。此功能最近已用于高级服务总线层。 我知道连接本身不是问题,因为我可以用这个连接工厂在主题中发布。我想知道是否有义务使用服务总线连接工厂或是否有解决方案。

  • https://github.com/azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.azure.servicebus/topicsubscriptionwithruleoperationssample 现在我想添加一个筛选器/规则,这样只有通过筛选器中定义的特定条件的消息才应该给订阅。 例如,下面