经常看到有人写的如下的IBM MQ客户端代码:

MQEnvironment.port = 1414;
MQEnvironment.hostname = "147.151.240.48";
MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);

//1 环境设置

qMgr = new MQQueueManager("MQ1");

这种代码在多线程的环境下运行还是有风险的: 比如上面的代码运行到 "//1 环境设置",另一个线程也是用类似的代码做

环境设置,假设代码如下:

MQEnvironment.port = 1415;
MQEnvironment.hostname = "......";
MQEnvironment.channel = ".....";
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);

这个线程把MQEnvironment.port改为了1415...

第一个线程构造 Queue Manager :qMgr = new MQQueueManager("MQ1");这时候,传给构造"MQ1"的端口就变成了

1415了,就会连接不上Queue Manager了.

正确的做法应该是在每次构造Queue Manager的时候把相应的设置传入构造函数.如下:

Hashtable prop = new Hashtable();
prop.put(MQC.PORT_PROPERTY, 1414);
prop.put(MQC.HOST_NAME_PROPERTY, "147.151.240.48");
prop.put(MQC.CHANNEL_PROPERTY, "SYSTEM.DEF.SVRCONN");
prop.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);

qMgr = new MQQueueManager("MQ1",prop);

这样就不会有线程间的问题了.

考虑一个具有 多线程 并配置为使用 MQ 将消息发送到大型机主机的应用程序.此应用程序配置了一个放置 队列 和获取 队列 .想象一下,每个要从主机获取数据的请求都被处理了10个.由于Queue只是其中一个,因此所有这10条消息都同时放入 队列 中,主机会处理这些消息并将答复发送... package com.hometest. IBM Mq Test;import java .io.IOException;import java .io.UnsupportedEncodingException;import com. ibm . mq . MQ Environment;import com. ibm . mq . MQ Exception;import com. ibm . mq . MQ GetMessageOption... 我在 多线程 环境中使用 MQ Series Perl模块时出现问题。在这里我曾尝试过: 多线程 MQ 在不同的线程中创建两个句柄与$ mq Mgr = MQ Series::Queue Manager ->new()。我认为这会给我两种不同的 MQ 连接 ,但是在第二次调用 MQ OPEN()时,我得到了返回码2219,这可能意味着我通过两次单独调用new()方法获得了与 mq 相同的下层 连接 。声明只有一个$ mq Mgr全球... package com.spring.thread.jms; import java .util.Random; import java .util.concurrent.ExecutorService; import java .util.concurrent.Exe... xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:a mq ="http://active mq .apache.org/schema/core"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/sc...        demo2 留下了两个问题:       1.我们利用demo2 的配置,在queue 模式下 连续发送10W消息出现出现状况。       2.topic 模式下,消费者重启时间段收不到监听的信息怎么办? 二、问题解析:         1.测试 发送10W消息,中途会出现          socket: tcp://localhost:61616... IBM ® MQ 是一款稳定、安全又可靠的消息传递中间件。它使用消息和 队列 支持 应用程序、系统、服务和文件之间的信息交换。它可以简化和加速多个平台中不同应用程序和业务数据的集成。 支持 各种 API 和语言,并可以在本地、云和混合云中部署。 安装 IBM MQ 本人使用的是window版本,这里演示一下window环境下安装过程。 双击setup.exe如下图所示: 打开界面显示选中软件需求哪里,... 本文实例是基于 WebSphere MQ 中将消息发送至远程 队列 的配置的基础上的,且如果要能正常运行 并发 送、接收消息,还需要在两个 队列 管理器(QM_ORANGE和QM_APPLE)上做如下配置或修改。1.创建名称为DC.SVRCONN的服务器 连接 通道 2.将 队列 管理器的通道认证记录设置为“已禁用” 该程序实现了发送消息与读取消息的功能,见其中的send***与get***方法。这只适合于... 第一步 安装 IBM WebSphere MQ for Linux http://www. ibm .com/developerworks/cn/linux/linux-speed-start/l-ss- mq /#userconsent# 第二步 配置 vi /var/ mq m/.bash_profile  #编辑bash_profile文件 PATH=$PATH:/opt/ mq m/s Spring Boot JMS与 IBM WebSphere MQ 集成配置[TOC]前言Spring Boot作为简化Spring开发的框架,已经为我们集成了Active MQ 和Rabbit MQ 。只需在Spring Boot配置几个 MQ 连接 方式即可开箱即用。大大简化了开发配置过程。 Spring的 Java Config相比传统的XML的配置方式使得配置更加的可靠和方便。 本文将会说明如何用 Java Co...