当 Java 应用程序和 IBM MQ 使用 Docker 运行时,MDB 尝试在 JNDI 中查找 Destination 属性,而不是查找具有该实际名称的队列

问题描述 投票:0回答:1

我有

  1. 提供带有以下 Dockerfile 的 IBM MQ 队列的 Docker 映像:
FROM ibmcom/mq

ENV LICENSE=accept
ENV MQ_QMGR_NAME=QMGR

COPY config.mqsc /etc/mqm/
COPY setup.sh /etc/mqm/
USER root
RUN chmod +x /etc/mqm/setup.sh

EXPOSE 1414 9443

CMD ["/etc/mqm/setup.sh"]

config.mqsc 只是定义我的队列

DEFINE QLOCAL('MY.TEST.QUEUE') REPLACE
和 setup.sh 是

#!/bin/bash

# Apply configuration
runmqsc < /etc/mqm/config.mqsc

# Start MQ server
QMGR_NAME=$MQ_QMGR_NAME
strmqm $QMGR_NAME
  1. 具有连接到该队列的 MessageDriven Bean 的 Java EE 应用程序。 Dockerfile 看起来像这样:
FROM jboss/wildfly:latest

ENV WILDFLY_CONFIG=standalone-full.xml
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0"]
WORKDIR /app

COPY /target/my-app.jar /opt/jboss/wildfly/standalone/deployments/

我这样配置我的 MDB:

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "My.Test.Queue")
})

我在同一网络上启动了两个 Docker 容器:

docker network create testnetwork
docker run --network=testnetwork -d -p 8080:8080 --name app-test-container app-test
docker run --network=testnetwork -d -p 1414:1414 -p 9443:9443 --name queue-test-container queue-test

但是,我收到以下错误:

AMQ153005: Unable to retrieve "MY.TEST.QUEUE" from JNDI. 
Creating a new "javax.jms.Queue" named "jms.queue.MY.TEST.QUEUE" to be used by the MDB.

因此,出于某种原因,MDB 似乎尝试寻找 JNDI 资源,而不是实际提供的名称的队列。为什么会这样?

java docker jboss ibm-mq
1个回答
0
投票

请尝试添加

@ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false")

© www.soinside.com 2019 - 2024. All rights reserved.