首页 > 解决方案 > 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;
    }

标签: springspring-boottomcatibm-mqmq

解决方案


@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;
    }

推荐阅读