Open Liberty 19.0.0.3 中的消息驱动 Bean 在访问 ActiveMQ 时未激活

Message-driven Beans in Open Liberty 19.0.0.3 do not activate when accessing ActiveMQ

我有一个 OpenLiberty 应用程序服务器通过资源适配器访问 Active MQ 5.15.18,但我无法正确配置激活规范,因此 MDB 在收到新消息时被激活。

应用程序能够将消息放入输出队列,但是,当新消息到达输入队列时,MDB 未激活。相同的代码适用于通过嵌入式本地提供程序在本地创建的队列(WLP 作为 JMS 服务器,不涉及 ActiveMQ)。

我已经尝试了几个从堆栈溢出中挑选出来的代码片段,我的问题看起来很像 但同样的食谱对我不起作用。

这是我的 MDB 代码:

@MessageDriven(name = "MyMDB",
        activationConfig = {  
           @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),  
           @ActivationConfigProperty(propertyName="destination", propertyValue="APP1_QIN"),  
           @ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")  
        })
public class MyMDB implements MessageListener {

    @PostConstruct
    public void postConstruct() {
        System.out.println("Init MDB");
    }

    @Override
    public void onMessage(Message message) {
        System.out.println("Message received in MDB: " + message);
    }

    @Resource
    MessageDrivenContext ejbcontext;
    @SuppressWarnings("unused")
    private void setMessageDrivenContext(EJBContext ejbcontext) {
    }

}

下面我的server.xml:

<server description="defaultServer">
    <featureManager>
        <feature>webProfile-7.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>wasJmsClient-2.0</feature>
        <feature>jca-1.7</feature>
    </featureManager>

    ...

    <resourceAdapter id="ActiveMQResourceAdapter" location="/path/to/libs/activemq-rar-5.15.8.rar">
        <properties.ActiveMQResourceAdapter ServerUrl="tcp://localhost:61616" />
    </resourceAdapter>

    <jmsQueueConnectionFactory connectionManagerRef="QueueConnMgr" jndiName="jms/QCF">  
        <properties.ActiveMQResourceAdapter />      
    </jmsQueueConnectionFactory>    

    <jmsQueue id="APP1_QIN" jndiName="jms/APP1_QIN">
        <properties.ActiveMQResourceAdapter PhysicalName="APP1_QIN" />
    </jmsQueue>

    <jmsQueue id="APP1_QOUT" jndiName="jms/APP1_QOUT">
        <properties.ActiveMQResourceAdapter PhysicalName="APP1_QOUT" />
    </jmsQueue>

     <jmsActivationSpec id="MyMDB">     
        <properties.ActiveMQResourceAdapter/> <!--  destination="APP1_QIN"   -->
    </jmsActivationSpec>

    <connectionManager id="QueueConnMgr" maxPoolSize="5"/>
</server>

我希望 MDB 在收到消息后立即正确激活,但事实并非如此。此外,查看 ActiveMQ 控制台,此队列中的消费者似乎为零。

有什么想法吗?

看起来您的 AS id 可能不正确,它应该采用以下形式:<activationSpec id="app1/module1/MyMessageDrivenBean"> 应用程序、模块和消息驱动 bean 的正确名称。

在此处查看有关配置 AS 的更多详细信息Configuring JCA activation specifications