簡體   English   中英

使用 JmsListener 連接到 IBM MQ

[英]Connect to IBM MQ using JmsListener

我有一個 Spring 應用程序,我想使用JmsListener連接到 IBM MQ。 這是我的配置:

package com.in28minutes.example.layering.model;

import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter;

import javax.jms.ConnectionFactory;

@Configuration
@EnableJms
public class Qm1Config {

    @Bean
    public MQQueueConnectionFactory qm1ConnectionFactory() {
        MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
        try {
            cf.setHostName("localhost");
            cf.setPort(1414);
            cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
            cf.setQueueManager("QM1");
            cf.setChannel("DEV.ADMIN.SVRCONN");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cf;
    }

    @Bean
    UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(@Qualifier("qm1ConnectionFactory") ConnectionFactory connectionFactory) {
        UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
        userCredentialsConnectionFactoryAdapter.setUsername("admin");
        userCredentialsConnectionFactoryAdapter.setPassword("passw0rd");
        userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(connectionFactory);
        return userCredentialsConnectionFactoryAdapter;
    }

    @Bean
    public JmsListenerContainerFactory<?> qm1JmsListenerContainerFactory(@Qualifier("userCredentialsConnectionFactoryAdapter") UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(userCredentialsConnectionFactoryAdapter);
        return factory;
    }
}

這是我的消費者:

package com.in28minutes.example.layering.model;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class QueueConsumer {

    @JmsListener(destination = "DEV.QUEUE.1", containerFactory = "qm1JmsListenerContainerFactory")
    public void receive1(String text) {
        System.out.println("Received from qm1: " + text);
    }

}

我已將應用程序部署到 TomEE plus 容器中,並向隊列發送了幾條消息:

在此處輸入圖片說明

我還在 servlet-context.xml 中添加了以下條目

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:beans=""
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.in28minutes.example.layering.model" />
</beans>

但是,應用程序並沒有使用這些消息。 我該如何解決?

更新#1我用@EnableJMS 注釋了消費者類

@Component
@EnableJms
public class QueueConsumer {

    @JmsListener(destination = "DEV.QUEUE.1", containerFactory = "qm1JmsListenerContainerFactory")
    public void receive1(String text) {
        System.out.println("Received from qm1: " + text);
    }

}

我仍然沒有收到消息

您可以嘗試在 QueueConsumer 類上添加@EnableJms嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM