我正在尝试通过我的 Spring Boot 应用程序连接到 IBM MQ(远程队列)。
配置:
@Configuration
@EnableJms
@ConditionalOnProperty(value = "mq.enabled", havingValue = "true")
@Import({MQAutoConfiguration.class, JmsAutoConfiguration.class})
public class MQConfiguration {
@Bean
JmsListenerContainerFactory<?> jmsListenerContainerFactory(
ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
var factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
}
听众:
@JmsListener(destination = "${test-queue}")
public void receive(TextMessage message) {
try {
var foo =
objectMapper.readValue(message.getText(), Foo.class);
LOGGER.info("Incoming JMS message : " + message.getText());
//Business logic
} catch (Exception e) {
e.printStackTrace();
}
}
application.yaml:
ibm:
mq:
channel: DEV.CHNL
user: app
conn-name: ${ibm.mq.host}(${ibm.mq.port})
queue-manager: QM_NAME
pom.xml:
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>mq-jms-spring-boot-starter</artifactId>
<version>${ibm-mq.version}</version>
</dependency>
队列管理器需要 UserId 才能连接到队列。 userId 由进程名称自动设置,而不是来自此处提到的 yaml https://www.ibm.com/support/pages/how-specify-userid-and-password-when-connecting-ibm-mq
如果该属性设置为默认值,则 Java 的 WebSphere MQ 类将查询 Java 系统属性 user.name。 即使设置了这些道具后,它也无法按预期工作。
ibm.mq.user
ibm.mq.password
IBM 的核心内部库以某种方式读取 System.getProperty("user.name")。
我唯一可以设置的方法是uing
set - _JAVA_OPTIONS=-Duser.name=myUser
我们是否可以设置 WMQConstants.USERID 而无需设置 java 用户名?