spring - JMS 的 Spring Tomcat 配置(IBM MQ、Tomcat、Spring)
问题描述
我有一个相对较旧的应用程序,它使用 Websphere MQ 进行消息传递。它在 WAS(Websphere 应用服务器)上运行并使用 MDB(消息驱动 Bean)。我必须从 Websphere 迁移该应用程序,以便 Tomcat
我使用 springboot 尝试了一些东西,并且能够编写一个示例 JMS 应用程序,该应用程序连接到队列并读取消息并能够处理它们,但尚未使用 JMS 实现事务管理。现在我被要求配置应用程序以便它在 tomcat 上运行。谁能帮忙,我必须如何以及在哪里设置tomcat中的配置。或者,如果将我的 springboot 应用程序打包为 war 并将其部署在 Tomcat 上,则需要进行哪些更改。
这就是我在 applicationconfig.java 中的代码的样子
@Bean(name = "mqQueueConnectionFactory")
public MQQueueConnectionFactory mqQueueConnectionFactory() {
MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
try {
mqQueueConnectionFactory.setHostName("hostname");
mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
mqQueueConnectionFactory.setCCSID(1208);
mqQueueConnectionFactory.setChannel("channel");
mqQueueConnectionFactory.setPort(1415);
mqQueueConnectionFactory.setQueueManager("qManager");
} catch (Exception e) {
System.out.println("MQQueueConnectionFactory bean exception" + e);
}
return mqQueueConnectionFactory;
}
@Bean
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(
MQQueueConnectionFactory mqQueueConnectionFactory) {
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
userCredentialsConnectionFactoryAdapter.setUsername("");
userCredentialsConnectionFactoryAdapter.setPassword("");
userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);
return userCredentialsConnectionFactoryAdapter;
}
@Bean
@Primary
public CachingConnectionFactory cachingConnectionFactory(
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);
cachingConnectionFactory.setReconnectOnException(true);
return cachingConnectionFactory;
}
@Bean
public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
jmsTemplate.setReceiveTimeout(50000);
return jmsTemplate;
}
解决方案
@Bean(name = "wmq")
public JmsComponent wmQ(@Value(AppConstants.WMQ_CONNECTION_TYPE) int connType,
@Value(AppConstants.WMQ_HOST) String hostName,
@Value(AppConstants.WMQ_PORT) Integer port,
@Value(AppConstants.WMQ_QUEUE_MANAGER) String queueManager,
@Value(AppConstants.WMQ_CHANNEL) String channel,
@Value(AppConstants.WMQ_CONCURRENT_CONSUMERS) int concurrentConsumers,
@Value(AppConstants.WMQ_USERNAME) String username,
@Value(AppConstants.WMQ_PASSWORD) String password
) throws JMSException {
JmsComponent jmsComponent = new JmsComponent();
MQConnectionFactory mqConnectionFactory = new MQConnectionFactory();
try {
mqConnectionFactory.setTransportType(connType);
mqConnectionFactory.setHostName(hostName);
mqConnectionFactory.setPort(port);
mqConnectionFactory.setQueueManager(queueManager);
mqConnectionFactory.setChannel(channel);
jmsComponent.setConnectionFactory(mqConnectionFactory);
JmsConfiguration jmsConfiguration = new JmsConfiguration(mqConnectionFactory);
jmsConfiguration.setUsername(username);
jmsConfiguration.setPassword(password);
jmsConfiguration.setConcurrentConsumers(concurrentConsumers);
jmsComponent.setConfiguration(jmsConfiguration);
} catch (JMSException e) {
String msg = "Error while creating IBM MQ Connection Factory";
throw new JMSException(msg);
}
return jmsComponent;
}
推荐阅读
- logstash - 无法将 csv 特定日期格式解析为 logstash 中的日期
- javascript - 使用 AJAX 在单个产品页面中将产品添加到购物车后获取产品数据
- excel - 在 Excel 工作表中可视化组合
- node.js - 通过 NodeJS 客户端接收所有 SQS 消息
- python - Pandas 根据另一列的值列表查找一列中的值
- c# - 如何使 Vector2 偏移点始终相对于自上而下射击游戏中变换的旋转?
- ip - 如何找到我的位置公共 IP 地址?
- java - Jackson/Gson 从 Json 获取指定的密钥 - Java
- html - React useEffect 保存 textarea 文本
- azure - 如何在 Azure 中使用 Kusto 划分计数?