IBM WebSphere MQ安装、集成

2021-02-11 05:17

阅读:379

标签:tcp   man   文本   png   data-   浏览器   ota   ccs   缺省   

#简介

IBM MQ(IBM Message Queue)是IBM的一款商业消息中间产品,适用于分布式计算环境或异构系统之中。

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。

 

#安装

1、官网下载地址:https://www.ibm.com/support/pages/node/318077

2、下载完成之后,创建一个用户,选择组为mqm,如下图所示:

技术图片

 

 

#配置MQ

#创建队列管理器

  1. 启动 MQ Explorer。
  2. 在“导航器”视图中,右键单击队列管理器文件夹,然后单击新建 > 队列管理器。
    这样会打开“创建队列管理器”向导。
  3. 队列管理器名称字段中,输入QM_JACK。
  4. 单击两次下一步。
  5. 确保从选择队列管理器启动类型选项中选择自动。
  6. 单击下一步。
  7. 确保选中创建配置用于 TCP/IP 的侦听器复选框。
  8. 如果完成按钮不可用,那么在侦听端口号字段中输入另一个端口号。
    如果当前值为 1414,那么尝试使用另一个端口号,例如:1415 或 1416。如果此阶段未使用缺省端口号 1414
  9. 单击完成。

#创建本地队列

  1. 在“导航器”视图中,展开队列管理器文件夹。
  2. 展开队列管理器 QM_JACK。
  3. 右键单击队列文件夹,然后单击新建 > 本地队列。
    这样会打开“新建本地队列”向导。
  4. 名称字段中,输入 QUEUE_RECV。
  5. 单击完成。

 

#将测试消息放入队列

  1. 在“导航器”视图中,展开队列管理器文件夹。
  2. 展开所创建的队列管理器 QM_JACK。
  3. 单击队列文件夹。
    这样会在“内容”视图中列出队列管理器的队列。
  4. 在“内容”视图中,右键单击本地队列 QUEUE_RECV,然后单击放入测试消息。
    这样会打开“放入测试消息”对话框。
  5. 消息数据字段中,输入一些文本,例如:这是测试消息,然后单击放入消息。
    系统会清空消息数据字段,并将消息放入队列。
  6. 单击关闭。

 

#验证是否已发送测试消息

  1. 在“导航器”视图中,展开队列管理器文件夹,然后再展开 QM_JACK。
  2. 单击队列文件夹。
  3. 在“内容”视图中,右键单击 QUEUE_RECV,然后单击浏览消息。
    这样会打开“消息”浏览器,显示当前 QUEUE_RECV上的消息列表。
  4. 双击最后一条消息以打开其属性对话框。

 

#创建服务器连接通道

  1. 在“导航器”视图中,展开队列管理器文件夹。
  2. 展开所创建的队列管理器 QM_JACK。
  3. 右击通道-新建-服务器连接通道,输入CNN_JACK
  4. 单击完成

#检查侦听器

  1. 在“导航器”视图中,展开队列管理器文件夹,然后再展开 QM_JACK。
  2. 单击侦听器文件夹。
  3. 查看侦听器状态是否正在运行,如果不是,可能端口冲突,修改端口

 

#集成指南

#pom配置

org.springframework
    spring-jms
javax.jms
    javax.jms-api
com.ibm.mq
    com.ibm.mq.allclient

 

#配置文件

mq:
  ibm:
    host: 127.0.0.1
    #侦听器端口号
    port: 8888
    #(队列管理器名称)
    queue-manager: QM_JACK
    #(队列名称)
    queue-name: QUEUE_RECV
    #(通道名称)
    channel: CNN_JACK
    #创建的MQ用户
    username: Administrator
    #创建的MQ用户连接密码
    password: 123
    receive-timeout: 20000

 

#配置类

import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.msg.client.wmq.WMQConstants;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jms.connection.CachingConnectionFactory;
import org.springframework.jms.connection.JmsTransactionManager;
import org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter;
import org.springframework.jms.core.JmsOperations;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.transaction.PlatformTransactionManager;
 
@Configuration
public class JmsConfig {
    @Value("${mq.ibm.host}")
    private String host;
    @Value("${mq.ibm.port}")
    private Integer port;
    @Value("${mq.ibm.queue-manager}")
    private String queueManager;
    @Value("${mq.ibm.channel}")
    private String channel;
    @Value("${mq.ibm.username}")
    private String username;
    @Value("${mq.ibm.password}")
    private String password;
    @Value("${mq.ibm.receive-timeout}")
    private long receiveTimeout;
 
    @Bean
    public MQQueueConnectionFactory mqQueueConnectionFactory() {
        MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
        mqQueueConnectionFactory.setHostName(host);
        try {
            mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
            mqQueueConnectionFactory.setCCSID(1208);
            mqQueueConnectionFactory.setChannel(channel);
            mqQueueConnectionFactory.setPort(port);
            mqQueueConnectionFactory.setQueueManager(queueManager);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mqQueueConnectionFactory;
    }
 
    @Bean
    UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(MQQueueConnectionFactory mqQueueConnectionFactory) {
        UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
        userCredentialsConnectionFactoryAdapter.setUsername(username);
        userCredentialsConnectionFactoryAdapter.setPassword(password);
        userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);
        return userCredentialsConnectionFactoryAdapter;
    }
 
    @Bean
    @Primary
    public CachingConnectionFactory cachingConnectionFactory(UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {
        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
        cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);
        cachingConnectionFactory.setSessionCacheSize(500);
        cachingConnectionFactory.setReconnectOnException(true);
        return cachingConnectionFactory;
    }
 
    @Bean
    public PlatformTransactionManager jmsTransactionManager(CachingConnectionFactory cachingConnectionFactory) {
        JmsTransactionManager jmsTransactionManager = new JmsTransactionManager();
        jmsTransactionManager.setConnectionFactory(cachingConnectionFactory);
        return jmsTransactionManager;
    }
 
    @Bean
    public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
        jmsTemplate.setReceiveTimeout(receiveTimeout);
        return jmsTemplate;
    }
}

 

#发送消息

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsOperations;
import org.springframework.stereotype.Component;
 
import javax.annotation.PostConstruct;
 
@Slf4j
@Component
public class SendMessage {
 
    @Autowired
    JmsOperations jmsOperations;
 
    @Value("${mq.ibm.queue-name}")
    String queueName;
 
    @PostConstruct
    public void send() {
        log.info("开始发送IBM WebSphere MQ消息...");
        jmsOperations.convertAndSend(queueName, "这是一个IBM WebSphere MQ消息");
    }
}

 

#接收消息

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsOperations;
import org.springframework.jms.listener.adapter.MessageListenerAdapter;
import org.springframework.stereotype.Component;
 
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
 
@Slf4j
@Component
public class ReceiveMessage extends MessageListenerAdapter {
 
    @Autowired
    JmsOperations jmsOperations;
 
    @Override
    @JmsListener(destination = "${mq.ibm.queue-name}")
    public void onMessage(Message message) {
        log.info("接收到IBM WebSphere MQ消息:{}", message.toString());
        try {
            log.info("IBM WebSphere MQ消息内容为:{}", ((TextMessage) message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
 
}

 

IBM WebSphere MQ安装、集成

标签:tcp   man   文本   png   data-   浏览器   ota   ccs   缺省   

原文地址:https://www.cnblogs.com/lushichao/p/13046437.html


评论


亲,登录后才可以留言!