Java Spring JMS:JmsTemplate 到 IBM MQ

Ran*_*d0m 5 java jmstemplate spring-jms spring-boot ibm-mq

更新

这是我的错误,我忘记了 ssl 调试正在运行,它现在非常快并且像魔术一样工作

我有一个使用 Spring JMS 连接到 IBM MQ 的 Spring Boot 应用程序。我意识到与根本不使用 Spring 相比,jmsTemplate 速度非常慢。我确信我有一些配置不正确的地方。希望有人可以提供帮助。

我使用 IBM MQ 8 jar 文件创建连接工厂。

@Bean
public ConnectionFactory connectionFactory() {
            properties.getCipherSpec());
    MQConnectionFactory factory = new MQConnectionFactory();
    try {
        factory.setHostName(properties.getHost());
        factory.setPort(properties.getPort());
        factory.setQueueManager(properties.getQueueManager());
        factory.setChannel(properties.getChannel());
        factory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
        factory.setClientReconnectTimeout(CLIENT_RECONNECT_TIMEOUT);
        factory.setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT);
        if (properties.isEnableSsl()) {
            factory.setSSLCipherSuite(properties.getCipherSpec());
            factory.setSSLSocketFactory(socketFactory());
        }   
        factory.setUseConnectionPooling(true);  
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return factory;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个缓存连接工厂并将目标连接工厂设置为上面的连接工厂。

@Bean(name = "cachingConnectionFactory")
public CachingConnectionFactory cachingConnectionFactory(){
    CachingConnectionFactory factory = new CachingConnectionFactory();
    factory.setSessionCacheSize(50);
    factory.setTargetConnectionFactory(connectionFactory());
    factory.setReconnectOnException(true);
    factory.afterPropertiesSet();
    return factory;
}
Run Code Online (Sandbox Code Playgroud)

然后在 Service 类中,我使用缓存连接工厂 bean 为每个线程创建 JmsTemplate 并使用正常的发送接收操作。

@Autowired
private CachingConnectionFactory connectionFactory;

@PostConstruct
@DependsOn(value = "cachingConnectionFactory")
public void setJmsConnectionFactory(){
     this.jmsQueueTemplate = new JmsTemplate(this.cachingConnectionFactory);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激 ...