IBM MQ消息中间件配置及开发示例

一、IBM MQ配置过程

1、创建用户

2、创建队列管理器

新建QM1队列管理器

在“下一步”到如下界面,注意选择图中标记的

下图端口可以根据需要进行修改,直到“完成”。

3、创建队列

在下图中新建本地队列

下图选择“持久”,然后完成。

4、创建服务器连接通道

输入名称,然后完成

5、分配权限

下图给队列管理器进行权限管理,把开始添加的用户添加进去

下图新建

下图手工输入开始创建的用户名,权限根据实际需要进行分配。

成功之后下图会出现创建的用户,会自动加上@计算名

给队列增加权限

方法和前面类似,如下图

上述MQ配置已经完成,可以开发了。

二、IBM MQ相关开发资料

1、GitHub ibm-messaging · GitHub

2、官方文档 https://www.ibm.com/docs/zh/ibm-mq/9.2

3、官方开发资料 https://www.ibm.com/docs/zh/ibm-mq/9.2?topic=mq-developing-applications

三、WAS和Tomcat环境开发示例

1、在 WebSphere Application Server (WAS) 环境中的示例

WAS 提供了内置的 JCA(Java Connector Architecture)支持,通过 JMS 绑定到 IBM MQ。假设已在 WAS 管理控制台配置了队列连接工厂(QueueConnectionFactory)和队列(Queue)。

代码:
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class WASMQExample {
    public static void main(String[] args) {
        try {
            // 设置 JNDI 环境
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
            env.put(Context.PROVIDER_URL, "iiop://localhost:2809"); // 替换为你的 WAS 端口和地址

            // 创建 JNDI 上下文
            Context context = new InitialContext(env);

            // 查找 QueueConnectionFactory 和 Queue
            QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup("jms/QueueConnectionFactory");
            Queue queue = (Queue) context.lookup("jms/Queue");

            // 创建连接和会话
            QueueConnection connection = connectionFactory.createQueueConnection();
            connection.start();
            QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

            // 创建消息生产者和发送消息
            QueueSender sender = session.createSender(queue);
            TextMessage message = session.createTextMessage("Hello from WAS!");
            sender.send(message);
            System.out.println("Message sent successfully to IBM MQ!");

            // 关闭资源
            sender.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

配置注意事项
  • 确保在 WAS 管理控制台中配置了 JMS 资源(队列连接工厂和队列)。
  • jms/QueueConnectionFactoryjms/Queue 是示例的 JNDI 名称,需要根据实际环境调整。

2、在 Tomcat 环境中的示例

Tomcat 本身不提供 JCA 支持,但可以使用 IBM MQ 的 Java 库直接与 MQ 通信。需要导入 IBM MQ 客户端库(例如 com.ibm.mq.allclient.jar)。

代码:
import com.ibm.mq.jms.MQQueueConnectionFactory;
import javax.jms.*;

public class TomcatMQExample {
    public static void main(String[] args) {
        try {
            // 配置 MQ 队列连接工厂
            MQQueueConnectionFactory factory = new MQQueueConnectionFactory();
            factory.setHostName("localhost"); // 替换为 MQ 主机地址
            factory.setPort(1414);           // 替换为 MQ 端口号
            factory.setQueueManager("QMGR"); // 替换为队列管理器名称
            factory.setChannel("CHANNEL");  // 替换为 MQ 通道名称
            factory.setTransportType(1);    // 使用 TCP/IP 传输

            // 创建连接和会话
            QueueConnection connection = factory.createQueueConnection("user", "password"); // 替换为 MQ 用户名和密码
            connection.start();
            QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

            // 创建队列并发送消息
            Queue queue = session.createQueue("QUEUE_NAME"); // 替换为 MQ 队列名称
            QueueSender sender = session.createSender(queue);
            TextMessage message = session.createTextMessage("Hello from Tomcat!");
            sender.send(message);
            System.out.println("Message sent successfully to IBM MQ!");

            // 关闭资源
            sender.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

配置注意事项
  1. 确保在 Tomcat 的 lib 目录下添加了 IBM MQ 的客户端库(如 com.ibm.mq.allclient.jar)。
  2. 替换示例中的主机地址、端口、队列管理器名称、通道名称、队列名称,以及用户凭据。

3、总结对比

特性WebSphere Application Server (WAS) 示例Tomcat 示例
配置复杂性配置依赖于 WAS 管理控制台,需使用 JNDI直接通过 Java 代码配置 MQ 属性
开发方式使用 JCA 和 WAS 内置资源通过 IBM MQ 客户端直接连接 MQ
适用场景企业已有 WAS 环境,集成较为便捷轻量级部署,适合无 WAS 环境的场景

四、消息中间件产品对比

1、 开源 MQ

1.RabbitMQ
  • 特点与优势
    • 基于 AMQP 协议,消息路由功能强大。
    • 易于安装和部署,社区活跃,生态丰富。
    • 提供插件机制,功能扩展灵活。
  • 劣势
    • 持久化性能较弱,不适合高并发场景。
    • 事务支持不如 IBM MQ 强。
  • 典型场景:实时数据处理、微服务架构、轻量级消息传递。
2.Apache Kafka
  • 特点与优势
    • 专注于高吞吐量、低延迟的日志和流处理。
    • 天然支持分布式架构,易于扩展。
    • 消息持久化能力强,适合大数据集成。
  • 劣势
    • 不支持标准的 JMS API,开发者学习成本较高。
    • 不适合需要严格消息顺序和事务的场景。
  • 典型场景:日志收集、流式数据分析、事件驱动架构。
3.ActiveMQ
  • 特点与优势
    • 完全支持 JMS API,适合传统 Java 开发。
    • 支持多种协议(AMQP、STOMP、MQTT)。
    • 社区支持,开源免费。
  • 劣势
    • 性能和扩展性不如 Kafka。
    • 运维复杂性较高,尤其在分布式部署时。
  • 典型场景:中小型企业的消息通信。

2、商用 MQ

1.IBM MQ

特点与优势

  • 企业级可靠性:支持事务、高可用性(HA)和灾备(DR),适用于对消息可靠性要求极高的场景。
  • 强一致性:消息的顺序性和持久性非常强,支持分布式事务。
  • 丰富协议支持:支持 JMS、MQTT、AMQP 等协议,兼容多种语言和平台。
  • 安全性:提供全面的安全特性,包括 TLS 加密、用户认证和细粒度访问控制。
  • 集成能力:与 IBM 的其他中间件(如 WebSphere、API Connect)无缝协作。
  • 性能优化:在高吞吐量和低延迟场景下表现出色,尤其是跨地域或跨数据中心通信。

劣势

  • 成本高:商用授权费用较高,特别是对于中小企业。
  • 运维复杂:需要专业的 MQ 管理员进行配置和维护。
  • 开发生态相对封闭:虽然兼容主流协议,但文档和社区支持不如开源产品丰富。

典型使用场景: 金融、航空、制造等对数据可靠性和一致性要求极高的行业。

2.AWS SQS (Simple Queue Service)
  • 特点与优势
    • 托管服务,无需用户管理基础设施。
    • 与 AWS 生态集成紧密,支持 Lambda、SNS 等服务。
    • 高可用、可扩展,按使用量计费。
  • 劣势
    • 依赖 AWS 平台,难以迁移。
    • 不支持严格的消息顺序,事务能力有限。
  • 典型场景:云原生应用程序、微服务通信。
3.Azure Service Bus
  • 特点与优势
    • 支持高级特性(如分区、会话、死信队列)。
    • 与 Microsoft Azure 产品深度集成。
  • 劣势
    • 同样依赖 Azure 平台,不适合多云部署。
    • 学习曲线较陡峭。
  • 典型场景:企业应用集成、云迁移项目。
4.Redis Streams
  • 特点与优势
    • 基于 Redis 的流式处理功能,易于上手。
    • 低延迟,适合实时任务。
  • 劣势
    • 功能较简单,事务支持较弱。
    • 高并发和大规模数据场景下性能受限。
  • 典型场景:实时计数、轻量级事件流。

4、国产 MQ

1.RocketMQ(阿里巴巴开源)
  • 特点与优势
    • 高吞吐量、低延迟,支持分布式事务。
    • 原生支持延时消息、消息重试。
    • 社区活跃,文档齐全,适合本土企业。
  • 劣势
    • 相比 IBM MQ,稳定性稍逊。
    • 对运维人员要求较高。
  • 典型场景:电商、金融、物流领域。
2.RabbitMQ(国产定制版本)
  • 特点与优势
    • 国内社区支持强,针对国内业务需求优化。
    • 功能全面,适合中小企业。
  • 劣势
    • 扩展性不如 RocketMQ。
  • 典型场景:传统行业的消息通信需求。
3.国产闭源 MQ(如达梦 MQ、金仓 MQ)
  • 特点与优势
    • 面向政府、军工、金融等领域,符合国内合规要求。
    • 提供全栈服务,性能优化针对本地需求。
  • 劣势
    • 封闭生态,社区活跃度较低。
    • 与国际主流标准兼容性较差。
  • 典型场景:国产化替代、敏感行业应用。

5、对比总结

特性IBM MQ开源 MQ(Kafka、RabbitMQ 等)商用 MQ(AWS、Azure 等)国产 MQ(RocketMQ 等)
可靠性极高
扩展性中等(集中式)高(分布式)高(托管服务)
学习曲线较陡峭较简单依赖厂商平台较平缓
生态支持偏封闭活跃云生态集成国内活跃
成本免费或低成本按使用量付费较低
适用场景高可靠、高事务场景微服务、轻量通信、流式处理云原生、快速部署电商、金融、本土替代

6、选择建议

  • IBM MQ:适用于对可靠性、安全性要求极高的场景,如银行、航空等。
  • 开源 MQ:适合预算有限的中小企业、创新型企业,以及需要灵活扩展的流式处理场景。
  • 商用 MQ:适合已经使用云服务的企业,尤其是微服务和事件驱动架构。
  • 国产 MQ:适用于国产化替代、本土优化场景,或需要支持中文文档和本地服务的用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海科技服务

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值