IBM WebSphere MQ / Omegamon XE for Messaging / ActiveMQ 5.9 / Apache Artemis

s

http://wiki.cns*****.com/pages/viewpage.action?pageId=17402801

1) 同步调用,支持rsf、dubbo两种接口实现;

2) 异步调用,支持IBM MQ、Kafka两种接口实现;

超高性能的 Java 对象消息服务器:Apache Artemis

http://www.open-open.com/lib/view/open1433316890635.html

Apache ActiveMQ Artemis 提供了一个非堵塞架构,实现了超高性能的 Java 对象消息服务器。其核心只依赖一个 netty.jar 文件。该项目的目的是为你的 Java 应用提供一个嵌入式的消息服务。

架构图:

嵌入式消息服务:Apache Artemis 

AMQP protocol support

OpenWire support for ActiveMQ 5 clients

STOMP protocol support

HornetQ Core protocol support for HornetQ 2.4,2.5 clients

JMS 2.0 and 1.1 support

High availability with shared store and non shared store (replication)

Flexible Clustering

High performance journal for message persistence

Queue memory limitation

SSL support

Management over JMX, JMS and core protocol

Large message support

Topic hierarchies

Producer flow control

Consumer flow control

Diverts

Last value queue

Message Groups

web test LoadRunner projects

http://lindows.iteye.com/blogs/2250305

D:\TestCase\20170302_windq_artemis

性能测试问题1:

最终性能瓶颈:

源码分析如下:

 

 

 

Rabbit MQ 

 

Apache ActiveMQ 5.9

ActiveMQ 远程监控JMX设置

http://blog.csdn.net/hjxgood/article/details/18706759

Jboss Wildfly 8.1 配置ActiveMQ 5.9 JMX

https://issues.jboss.org/browse/WFLY-794

javax.naming.NameNotFoundException: rmi://127.0.0.1:1090/jmxrmi thrown when creating MBeanServerConnection

jboss Wildfly 8.1  配置rmi

需要在 /opt/jboss/modules/system/layers/base/sun/jdk/main/module.xml 文件中加一行

<path name="com/sun/jndi/url/rmi"/>

jboss才能支持jmxrmi方式访问

ActiveMQ 远程监控JMX设置

http://blog.csdn.net/hjxgood/article/details/18706759 

================================================================== 

linux下的设置:

1.cat /etc/hosts 检查hosts文件设置,不用127.0.0.1,用实际IP地址

12.32.234.21 localhost localhost.localdomain localhost4 localhost4.localdomain4

 

2.${ACTIVEMQ_HOME}/conf/activemq.xml 中的 broker 节点增加  useJmx="true" 属性

 

3.${ACTIVEMQ_HOME}/conf/activemq.xml 中的 managementContext 节点修改成如下样子

<managementContext>   
<managementContext createConnector="true" connectorPort="11099" />
</managementContext> 

connectorPort="11099"要加上,否则出现java.lang.RuntimeException: java.rmi.ConnectException: Connection refused to host: 127.0.0.1的错误

 

4.chmod 400 /opt/activemq/conf/jmx.*
注意事项: jmx.password和jmx.access 文件权限必须是当前用户只读(也就是400)否则会使得activemq无法启动,而且没有任何地方报错。 

 

5.activemq设置:

ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=11099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"

 

6.重新启动activemq

/usr/local/activemq/bin/activemq stop

/usr/local/activemq/bin/activemq start

观察端口

netstat –nltp|grep 11099
查看11099端口是否开启监控

使用jconsole连接(path:C:\Program Files\Java\jdk1.6.0_16\bin\jconsole.exe)

运行jconsole.exe

在远程进程连接填入

12.32.234.21:11099

再填入用户名和密码admin和activemq(jmx.password里的内容)即可连接

 

7.java测试方法:

 public static List<QueueInfoVO> getQueueInfoList(String mqIpAddress, String rmiPort) throws Exception {
        List<QueueInfoVO> result = new ArrayList<QueueInfoVO>();
        RemoteJMXBrokerFacade createConnector = new RemoteJMXBrokerFacade();
        // 填写链接属性
        System.setProperty("webconsole.jmx.url", "service:jmx:rmi:///jndi/rmi://" + mqIpAddress + ":" + rmiPort
                + "/jmxrmi");
        System.setProperty("webconsole.jmx.user", "admin");
        System.setProperty("webconsole.jmx.password", "activemq");
        // 创建配置
        SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration();
        // 创建链接
        createConnector.setConfiguration(configuration);
        Collection<QueueViewMBean> queueViewList = createConnector.getQueues();
        for (QueueViewMBean queueViewMBean : queueViewList) {
            QueueInfoVO vo = new QueueInfoVO();
            vo.setQueueName(queueViewMBean.getName());// 名称
            vo.setQueueSize(queueViewMBean.getQueueSize());// 待消费消息
            vo.setConsumerCount(queueViewMBean.getConsumerCount());// 消费者
            vo.setEnqueueCount(queueViewMBean.getEnqueueCount());// 入列消息
            vo.setDequeueCount(queueViewMBean.getDequeueCount());// 出列消息
            result.add(vo);
        }
        return result;
    }

===================================================================== 

通过Omegamon XE和Tivoli Monitoring改进WebSphere MQ 集群工作负载平衡

http://space.itpub.net/14789789/viewspace-671156

WebSphere MQ Clustering 来平衡消息工作负载;

Omegamon XE for Messaging 和 IBM Tivoli Monitoring 来监控 WebSphere MQ 队列的状态并自动化配置更改。

//192.168.134.183

Websphere MQ入门教程-使用IBM Websphere MQ

http://sivyer.iteye.com/blog/117267

第一部分 Websphere MQ原理和体系结构... 11

第一章Websphere MQ原理... 11

目标... 11

1.1中间件... 11

1.1.1中间件的优点... 11

1.1.2中间件的分类... 12

1.2三种通信技术的比较... 13

1.3 WebSphere MQ的原理... 15

1.4 WebSphere MQ的重要特点... 16

1.4.1统一接口... 16

1.4.2处理不依赖时间的限制... 16

1.4.3给分布式处理提供的强健的中间件... 16

1.5本章小节... 17

1.6本章练习... 17

第二章Websphere MQ体系结构... 18

目标... 18

2.1基本概念... 18

2.1.1 WebSphere MQ对象(objects) 18

2.1.2 消息... 19

2.1.3 队列... 20

2.1.4队列管理器... 24

2.1.4通道... 25

2.1.5进程... 29

2.1.6群集... 29

2.1.7名称列表... 29

2.1.8认证信息对象... 30

2.1.9系统缺省对象... 30

2.1.10 MQI(message queue interface)... 30

2.2体系结构... 30

2.2.1 WebSphere MQ和消息排队... 31

2.2.2 队列管理器的进程... 32

2.3客户机和服务器... 33

客户机-服务器环境中的 WebSphere MQ 应用程序... 33

2.4触发机制... 33

2.4.1触发的概念... 33

2.4.2触发类型... 34

2.4.3触发的工作原理... 35

2.5 队列管理器群集... 36

2.5.1 群集的概念... 36

2.5.2 群集的优点... 37

2.5.3 群集的组件... 38

2.5.4 创建群集... 38

2.5.5 实现负载均衡... 39

2.5.6 群集管理... 40

2.6本章小结... 41

2.7本章练习... 41

第二部分 Websphere MQ系统管理... 43

第三章WebSphere MQ系统安装... 43

目标... 43

3.1 规划安装... 43

3.1.1 硬件要求... 43

3.1.2 软件要求... 44

3.2 安装 WebSphere MQ.. 46

3.2.1 WebSphere MQ 文档... 46

3.2.2 WebSphere MQ安装... 47

3.3 验证安装... 49

3.3.1安装验证... 49

3.3.2测试对象... 49

3.4 本章小结... 50

3.5本章练习... 50

第四章WebSphere MQ 的管理... 51

目标... 51

4.1 本地和远程管理... 51

4.2 使用命令管理 WebSphere MQ.. 51

4.2.1控制命令... 52

4.2.2WebSphere MQ 脚本(MQSC)命令... 52

4.2.3PCF 命令... 54

4.3 WebSphere MQ 配置... 56

4.3.1在 Windows 系统上更改配置信息... 56

4.3.2 在 UNIX 系统上更改配置信息... 57

4.4 WebSphere MQ 安全性... 60

管理 WebSphere MQ 的权限... 60

使用WebSphere MQ 对象的权限... 61

4.5 WebSphere MQ 事务性支持... 61

4.6 WebSphere MQ 死信队列处理程序... 62

4.7本章小结... 62

4.8本章练习... 63

第五章WebSphere MQ 控制命令... 64

目标... 64

5.1 如何使用控制命令... 64

WebSphere MQ 对象的名称... 64

5.2 控制命令... 65

控制命令集... 65

控制命令举例... 66

5.3 本章小结... 66

5.4本章练习... 66

第六章WebSphere MQ 互连通信... 68

目标... 68

6.1基本概念... 68

6.1.1 什么是互连通信... 68

6.1.2 分布式队列组件... 72

6.1.3 死信队列... 75

6.1.4怎样到达远程队列管理器... 75

6.2 实现应用程序通信... 77

6.2.1发送消息到远程队列管理器... 77

6.2.2触发通道... 79

6.2.3消息的安全性... 80

6.2.4 WebSphere MQ对象配置实例... 81

6.3通道的维护... 83

6.3.1通道的状态... 83

6.3.2通道维护命令... 84

6.3.3设置MaxChannels和MaxActiveChannels属性... 88

6.4配置侦听程序... 88

6.4.1 Windows 平台... 88

6.4.2 unix 平台... 88

6.5本章小结... 89

6.6本章练习... 89

第七章 WebSphere MQ 恢复和重新启动... 90

目标... 90

7.1 WebSphere MQ的数据日志... 91

7.1.1日志的概念... 91

7.1.2日志控制文件... 91

7.1.3日志类型... 92

7.1.4计算日志的大小... 92

7.2 使用数据日志进行恢复... 93

7.2.1从掉电或通信故障中恢复... 94

7.2.2恢复受损对象... 94

7.3保护 WebSphere MQ 日志文件... 96

7.4备份和恢复 WebSphere MQ.. 96

7.4.1备份 WebSphere MQ.. 96

7.4.2恢复 WebSphere MQ.. 96

7.5恢复方案... 97

7.5.1磁盘故障... 97

7.5.2受损的队列管理器对象... 98

7.5.3受损的单个对象... 98

7.5.4自动媒体恢复故障... 98

7.6使用 dmpmqlog 命令转储日志... 98

7.7本章小结... 101

7.8本章练习... 102

第八章 WebSphere MQ 问题诊断... 102

目标... 102

8.1错误日志... 102

8.1.1日志文件... 103

8.1.2忽略WebSphere MQ for Windows的错误代码... 104

8.1.3操作信息... 104

8.2死信队列... 104

8.3配置文件和问题确定... 104

8.4跟踪... 104

8.4.1WebSphere MQ Windows的跟踪... 104

8.4.2WebSphere MQ AIX的跟踪... 106

8.5首次故障支持技术(FFST)... 109

8.5.1FFST: WebSphere MQ Windows 版... 109

8.5.2FFST: WebSphere MQ UNIX 系统版... 110

8.6本章小结... 112

8.7本章练习... 112

第三部分 Websphere MQ 应用开发... 113

第九章 设计Websphere MQ应用程序... 113

目标... 113

9.1介绍应用设计... 113

9.1.1 规划设计... 113

9.1.2 WebSphere MQ 对象... 113

9.1.3 设计消息... 114

9.1.4 WebSphere MQ 技术... 114

9.1.5应用编程... 115

9.1.6 测试应用程序... 116

9.2 WebSphere MQ消息... 116

9.2.1消息描述符... 116

9.2.2消息种类... 116

9.2.3消息控制信息和消息数据的格式... 117

9.2.4消息优先级... 117

9.2.5消息组... 118

9.2.6消息持久性... 118

9.2.7检索消息... 119

9.2.8交付失败的消息... 119

9.3本章小结... 119

9.4本章练习... 119

第十章 用MQI编程... 119

目标... 119

10.1概述... 119

10.2 平台和语言... 120

10.3 库和存根模块程序... 121

10.4 体系结构模型... 122

10.5 用MQI编程... 124

10.5.1 基本API概念... 125

10.5.2 连接到队列管理器... 126

10.5.3 打开WebSphere MQ对象... 127

10.5.4 关闭WebSphere MQ对象... 130

10.5.5 断开与队列管理器的连接... 130

10.5.6 将消息放入队列... 131

10.5.7 从队列获取消息... 133

10.5.8 从队列浏览消息... 135

10.5.9查询对象属性... 136

10.5.10设置对象属性... 138

10.5.11 MQI中的事务处理... 139

10.5.12 MQI中的消息分组... 140

10.6本章小结... 142

10.7本章练习... 142

第十一章 用 C++ API编程... 143

目标... 143

11.1 概述... 143

11.2 平台和语言... 144

11.3库... 144

11.4体系结构模型... 145

11.5用C++ API编程... 146

11.5.1连接到队列管理器... 147

11.5.2打开WebSphere MQ对象... 147

11.5.3 关闭WebSphere MQ对象... 148

11.5.4 断开与队列管理器的连接... 148

11.5.5 消息放入队列... 148

11.5.6从队列获取消息... 150

11.5.7浏览队列上的消息... 153

11.5.8查询并设置对象属性... 153

11.5.9事务处理管理... 155

11.5.10消息分组... 155

11.6本章小结... 157

11.7本章练习... 157

第十二章 用Java编程... 158

目标... 158

12.1 概述... 158

12.2 平台... 158

12.2.1 获得软件包... 158

12.2.2 WebSphere MQ for Java的运行环境... 159

12.3 使用WebSphere MQ for Java. 161

12.3.1客户机连接模式... 161

12.3.2绑定模式... 162

12.3.3 类库... 162

12.4用WebSphere MQ Java API开展工作... 164

12.4.1 设置连接... 164

12.4.2 打开队列... 165

12.4.3 处理WebSphere MQ消息... 166

12.5应用程序开发... 167

12.5.1简单的消息发送器应用程序... 168

12.5.2简单的消息接收应用程序... 170

12.5.3请求/回复... 172

12.5.4回复应用程序... 175

12.5.5消息分组... 177

12.5.6简单的组接收应用程序... 180

12.6本章小结... 183

12.7本章练习... 183

第十三章 用ActiveX编程... 183

目标... 183

13.1 概述... 183

13.2 平台和语言... 184

13.3 库... 185

13.4 架构模型... 185

13.5 用WebSphere MQ automatin classes for ActiveX编程... 186

13.5.1 连接到队列管理器... 186

13.5.2 打开WebSphere MQ对象... 187

13.5.3 基本操作... 189

13.5.4 关闭对象... 191

13.5.5 关闭连接... 192

13.6 事务处理管理... 192

13.7 分组... 195

13.8 本章小结... 195

13.9本章练习... 195

第十四章 用AMI编程... 195

目标... 195

14.1 概述... 196

14.2 平台和语言... 198

14.3 库和包... 199

14.4 体系结构模型... 201

14.5 用AMI编程... 202

14.5.1 连接到队列管理器... 202

14.5.2 打开WebSphere MQ对象... 204

14.5.3 基本操作... 208

14.5.4 删除会话并关闭连接... 212

14.6 AMI和MQI的比较... 213

14.7 事务处理管理... 213

14.8 分组... 215

14.9本章小结... 215

14.10本章练习... 215

附录一 WebSphere MQ的缺省系统对象... 215

MQ从试用版升级为正版的过程

http://menglh.iteye.com/blog/286523

升级的过程只是将原来的rpm软件包卸载,安装正版的和注册的包就可以完成了,
不需要变动任何原来MQ已经有的队列管理器的配置。
用root账户登录进来
1:停止了连接MQ的服务
2:查看安装了MQ的系统里面的MQ有关的rpm包在系统里面的注册名称 用(rpm -q -a命令)
我自己的注册名字为下面的三个:
  MQSeriesSamples-6.0.2-3
  MQSeriesServer-6.0.2-3
  MQSeriesRuntime-6.0.2-3
3:停止mq的侦听和队列管理器
  停止侦听
  endmqlsr -m XXXXXX :XXXXXX为队列管理器名称
  停止队列管理器
  endmqm XXXXXX
4:重起MQ机器(由于以前的操作可能没有关闭runmqsc命令,
       导致有进程在用MQ,无法卸载,所以重起电脑。如果你的机子没有此类问题,请跳过。)
5:卸载rpm包(卸载的时候可能包和包之间有依赖关系,卸载的时候会有提示,可能根据提示来进行卸载操作)
我自己的卸载顺序如下:
rpm -e MQSeriesServer-6.0.2-3
rpm -e MQSeriesRuntime-6.0.2-3.3
rpm -e MQSeriesSamples-6.0.2-3
6:解压缩正版,安装对应的rpm包。
tar -xzvf VVVVVV.tar.gz  :"VVVVVV.tar.gz”为正版的包名称
./mqlicense.sh -accept
安装的时候也会有依赖关系,根据提示来进行。
rpm -ivh MQSeriesRuntime-6.0.2-3.3
rpm -ivh MQSeriesServer-6.0.2-3
rpm -ivh MQSeriesSamples-6.0.2-3
7:注册
我安装的MQ有一个专门注册的"ZZZZZ.tar.gz"文件,安装了"VVVVVV.tar.gz”包里面的什么rpm包就选择"ZZZZZ.tar.gz"里面的对应的rpm包进行同样的安装,就相当于注册了。

8:安装完成后显示的版本信息(dspmqver)
Name:        WebSphere MQ
Version:     6.0.2.4
CMVC level:  p600-204-080509
BuildType:   IKAP - (Production)
9:切换到mq的用户进行启动"队列管理器"和"侦听","通道"的操作吧,一切配置都没有动,还和原来一样,正版的安装到此结束了

 

websphere mq常用命令

http://menglh.iteye.com/blog/286524

创建队列管理器
crtmqm –q QMgrName
-q是指创建缺省的队列管理器

删除队列管理器
dltmqm QmgrName

启动队列管理器
strmqm QmgrName
如果是启动默认的队列管理器,可以不带其名字

停止队列管理器
endmqm QmgrName 受控停止

endmqm –i QmgrName 立即停止

endmqm –p QmgrName 强制停止

显示队列管理器
dspmq –m QmgrName

运行MQ命令
runmqsc QmgrName
如果是默认队列管理器,可以不带其名字

往队列中放消息
amqsput QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字

从队列中取出消息
amqsget QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字

启动通道
runmqchl –c ChlName –m QmgrName

启动侦听
runmqlsr –t TYPE –p PORT –m QMgrName

停止侦听
endmqlsr -m QmgrName

下面是在MQ环境中可以执行的MQ命令(即在runmqsc环境下可以敲的命令)

定义持久信队列
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE

设定队列管理器的持久信队列
ALTER QMGR DEADQ(QNAME)

定义本地队列
DEFINE QL(QNAME) REPLACE

定义别名队列
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)

远程队列定义
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)

定义模型队列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)

定义本地传输队列
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE

创建进程定义
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
创建发送方通道
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
创建接收方通道
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
显示队列的所有属性
DISPLAY QUEUE(QNAME) [ALL]
显示队列的所选属性
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
显示队列管理器的所有属性
DISPLAY QMGR [ALL]
显示进程定义
DISPLAY PROCESS(PRONAME)
更改属性
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
删除队列
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除队列中的所有消息
CLEAR QLOCAL(QNAME)
以下是一些高级配置的命令:
amqmcert                  配置SSL证书
amqmdain                配置windows上的MQ服务
crtmqcvx                    转换数据
dmpmqaut                转储对象权限管理
dmpmqlog                转储日志管理
dspmq                         显示队列管理器  // 192.168.134.183
dspmqaut                  显示打开对象的权限
dmpmqcap               显示处理程序容量和处理程序数
dspmqcsv                 显示命令服务器状态
dspmqfls                   显示文件名
dspmqtrc                   跟踪MQ输出(HP-UNIX LINUX Solaris)
dspmqrtn                   显示事务的详细信息
endmqcsv                 停止队列管理器上的命令服务器
strmqcsv                    启动队列管理器上的命令服务器
endmqtrc                   停止跟踪
rcdmqimg                  向日志写对象的映像
rcmqobj                      根据日志中的映像重新创建一个对象
rsvmqtrn                     提交或逆序恢复事务

关于Jboss下mqjms.log日志问题.

http://wiki.cns*****.com/display/~11050146

http://wiki.cns*****.com/pages/viewpage.action?pageId=20906160

IBM MQ logging 采用 IBM common services 记录日志.  可设置如下JVM参数

"com.ibm.msg.client.commonservices.trace.status" value="OFF"

"com.ibm.msg.client.commonservices.trace.level" value="0"

"com.ibm.msg.client.commonservices.trace.append" value="true"

"com.ibm.msg.client.commonservices.trace.startup" value="true"

"com.ibm.msg.client.commonservices.trace.maxBytes" value="-1"

"com.ibm.msg.client.commonservices.trace.limit" value="2097152"

"com.ibm.msg.client.commonservices.trace.count" value="1"

"com.ibm.msg.client.commonservices.trace.standalone" value="true"

"com.ibm.msg.client.commonservices.trace.errorStream" value="${jboss.server.log.dir}/wmq-trace-error.log"

"com.ibm.msg.client.commonservices.trace.outputName" value="${jboss.server.log.dir}/wmq-trace.log"

"com.ibm.msg.client.commonservices.log.outputName" value="${jboss.server.log.dir}/wmq.log"

"com.ibm.msg.client.commonservices.log.status" value="ON"

"com.ibm.msg.client.commonservices.log.maxBytes" value="-1"

"com.ibm.msg.client.commonservices.log.limit" value="2097152"

"com.ibm.msg.client.commonservices.log.count" value="1"

"com.ibm.msg.client.commonservices.log.append" value="true"

"com.ibm.msg.client.commonservices.ffst.suppress" value="-1"

例如:

-Dcom.ibm.msg.client.commonservices.log.count=5 -Dcom.ibm.msg.client.commonservices.log.maxBytes=1000000

D:\TestCase\20161031_1111_mq_esb

was_mq_持久化表示内存到磁盘落盘动作.png,容易造成disk busy,性能可能会有所下降,需要关注,带来的好处就是宕机再起来MQ,能保证数据不会丢失。

was_mq_长连接会话共享_可以原本100个长连接共享变为10个长连接.png

was_mq_最大队列深度4000左右.png / WAS MQ 7.0.1.12 ,最大队列深度3500左右

http://dl2.iteye.com/upload/attachment/0121/2386/8b8d9225-33df-366b-8fd4-da46c327b82a.png

http://dl.iteye.com/topics/download/40733a57-8d1f-3cc9-9991-72b6baecb913

WebSphere_MQ_Linux_v7.1_Performance_Evaluations__mpl7.zip / mpl7.pdf

http://dl.iteye.com/topics/download/50fffb73-bfb1-37f0-9b7d-a13065795ca8

W:\TestCase\20161031_1111_mq_esb

C:\Users\Lindows\Desktop\tc_testsend_ibm_mq\action.java

/*
 * LoadRunner Java script. (Build: _build_number_)
 * 
 * Script Description: 
 *                     
 */

import lrapi.lr;
import com.ibm.mq.*;

public class Actions
{

    // Variables used by more than one method
    String queueMgrName = "OTHER_NEW1_QM";
    String putQueueName = "TESTESB";
    //String getQueueName = "TEST.REPLY.QUEUE";
 
    MQQueueManager queueMgr = null;
    MQQueue getQueue = null;
    MQQueue putQueue = null;
    MQPutMessageOptions pmo = new MQPutMessageOptions();
    MQGetMessageOptions gmo = new MQGetMessageOptions();
    MQMessage requestMsg = new MQMessage();
    MQMessage responseMsg = new MQMessage();
    String msgBody = null;
 
    public int init() throws Throwable {
        // Open a connection to the queue manager and the put/get queues
        try {
            // As values set in the MQEnvironment class take effect when the 
            // MQQueueManager constructor is called, you must set the values 
            // in the MQEnvironment class before you construct an MQQueueManager object.
            MQEnvironment.hostname="10.27.210.25";
            MQEnvironment.port=1601;
            MQEnvironment.channel = "CHANNEL1";
            queueMgr = new MQQueueManager(queueMgrName);
 
            // Access the put/get queues. Note the open options used.
            putQueue = queueMgr.accessQueue(putQueueName, MQC.MQOO_BIND_NOT_FIXED | MQC.MQOO_OUTPUT);
            //getQueue= queueMgr.accessQueue(getQueueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT);
        } catch(Exception e) {
            lr.error_message("Error connecting to queue manager or accessing queues.");
            lr.exit(lr.EXIT_VUSER, lr.FAIL);
        }
 
        return 0;
    }//end of init
 
    public int action() throws Throwable {
        // This is an XML message that will be put on the queue. Could do some fancy 
        // things with XML classes here if necessary.
        // The message string can contain {parameters} if lr.eval_string() is used.
        msgBody = lr.eval_string("<MbfService><input1><MbfHeader><ServiceCode>TestESB</ServiceCode><Operation>esbmqTest</Operation><AppCode>OMSD</AppCode><UId>749137bc7ffe4031898733fe68decfed4fc58f98e8ac48f1</UId><AuthId>POAS;bv15Z0a83Uc3</AuthId></MbfHeader><MbfBody><opType>M</opType><cart2No>2283575567253458</cart2No><b2cOrderId>11011982886</b2cOrderId><orderDate>2016-10-30</orderDate><orderTime>14:36:45</orderTime><orderSource>TMALL</orderSource><orderChannel>MOBILE</orderChannel><orderItemQty>1</orderItemQty><payItemQty>2</payItemQty><orderSaleTotalAmt>9.9</orderSaleTotalAmt><realPayAmt>9.89</realPayAmt><srvFee>0.0</srvFee><transportFee>0.0</transportFee><needInvoiceFlag>Y</needInvoiceFlag><receiveOrderType>1</receiveOrderType><memType>e</memType><memInCardNo>6116427259</memInCardNo><memName>0822zhaoxing</memName><invoiceType>02</invoiceType><invoiceTitle>璧垫槦</invoiceTitle><list0><payMethodInvoiceHead><parentPaymentCode>69</parentPaymentCode><paymentCode>6901</paymentCode><payAmount>0.01</payAmount></payMethodInvoiceHead><payMethodInvoiceHead><parentPaymentCode>42</parentPaymentCode><paymentCode>4232</paymentCode><payAmount>9.89</payAmount></payMethodInvoiceHead></list0><list1><orderItem><referencePrice>24.6</referencePrice><cartItemNo>2283575567253458</cartItemNo><b2cOrderItemId>11014882503</b2cOrderItemId><orderType>ZOR</orderType><posOrderId>Z15783118</posOrderId><orderItemType>10</orderItemType><distChannel>50</distChannel><payChannel>PC</payChannel><saleOrg>1900</saleOrg><saleOrgStore>858C</saleOrgStore><storeCode>858C</storeCode><shippingCondition>01</shippingCondition><cmmdtyCode>000000000131225835</cmmdtyCode><cmmdtyName>浜旂緤瀹濆疂涓撶敤娲楄。娑?00ml脳3琚嬪疂瀹濅笓鐢ㄨ。鐗╂竻娲佸墏琛ュ厖瑁?/cmmdtyName><cmmdtyDivsion>10</cmmdtyDivsion><cmmdtyCtgry>R9003453</cmmdtyCtgry><cmmdtyBand>00019G754</cmmdtyBand><haveSrvFlag>0</haveSrvFlag><haveExtendFlag>0</haveExtendFlag><price>9.9</price><saleQty>1</saleQty><saleUnit>SO1</saleUnit><totalAmount>9.9</totalAmount><couponTotalMoney>0.01</couponTotalMoney><managerCardMoney>0.0</managerCardMoney><pointAmount>0.0</pointAmount><voucherTotalMoney>0.0</voucherTotalMoney><srvFee>0.0</srvFee><transportFee>0.0</transportFee><provideAddress>D017</provideAddress><stockArea>0001</stockArea><supplierCode>0010058636</supplierCode><shopCode>store001</shopCode><comCharacter>2</comCharacter><prmtCode>T100018746</prmtCode><purchaseFlag>0</purchaseFlag><deliveryArea>9120201</deliveryArea><agencyFlag>J</agencyFlag><hopeArrivalDate>2016-10-31</hopeArrivalDate><hopeArrivalTime>18:00:00</hopeArrivalTime><estimateOutDate>2016-10-30</estimateOutDate><estimateOutTime>00:00:00</estimateOutTime><verifyCode>1234</verifyCode><payItemQty>2</payItemQty><invoicePrintAddress>D017</invoicePrintAddress><srvSaleCount>1.0</srvSaleCount><srvProvider>鑻忓畞</srvProvider><srvAddress>0;;姒嗘灄甯?绁炴湪鍘?绁炴湪闀?;;;绁炴湪闀囩閫氳矾涓氬叕鍙稿皬鍖轰竴鍙锋ゼ浜屽崟鍏?01</srvAddress><srvAreaCode>9120201</srvAreaCode><list0/><list1/><list2><payMethodOrderItem><parentPayCode>69</parentPayCode><payCode>6901</payCode><payAmount>0.01</payAmount><payDate>2016-10-30</payDate><payTime>14:36:56</payTime></payMethodOrderItem><payMethodOrderItem><parentPayCode>42</parentPayCode><payCode>4232</payCode><payAmount>9.89</payAmount><payDate>2016-10-30</payDate><payTime>14:36:56</payTime></payMethodOrderItem></list2><transactionobjectitems><transactionobjectitem><transactionobject>10</transactionobject><consignee>璧垫槦</consignee><mobPhoneNum>15029730858</mobPhoneNum><zipCode>719300</zipCode><cityCode>912</cityCode><deliveryAddrMain>0;;姒嗘灄甯?绁炴湪鍘?绁炴湪闀?;;;绁炴湪闀囩閫氳矾涓氬叕鍙稿皬鍖轰竴鍙锋ゼ浜屽崟鍏?01</deliveryAddrMain></transactionobjectitem></transactionobjectitems><dealtypeItems><dealtypeItem><dealtype>01</dealtype><dealtypeflag>11</dealtypeflag></dealtypeItem></dealtypeItems><sourceAttributionItems/></orderItem></list1></MbfBody></input1></MbfService>"); 
        // Clear the message objects on each iteration.
        requestMsg.clearMessage();
        responseMsg.clearMessage();
 
        // Create a message object and put it on the request queue
        lr.start_transaction("test_message");

        try {

	    requestMsg.format = MQC.MQFMT_STRING; // Set message format. The application message data can be either an SBCS string (single-byte character set), or a DBCS string (double-byte character set). 
            
            requestMsg.writeString(msgBody); // message payload

            putQueue.put(requestMsg, pmo);
        } catch(Exception e) {
        	lr.error_message("Error sending message.");
        	lr.exit(lr.EXIT_VUSER, lr.FAIL);
        }
         
        lr.end_transaction("test_message", lr.AUTO);
 
        return 0;
    }//end of action
 
    public int end() throws Throwable {
        // 	Close all the connections
        try {
            putQueue.close();            
            queueMgr.close();
        } catch(Exception e) {
            lr.error_message("Exception in closing the connections");
            lr.exit(lr.EXIT_VUSER, lr.FAIL);
        }
 
        return 0;
    }//end of end

}

依赖的jar包列表如下: 

com.ibm.mq.commonservices.jar 

com.ibm.mq.headers.jar

com.ibm.mq.jmqi.jar

com.ibm.mq.jar

connector.jar

end

原文地址:https://www.cnblogs.com/lindows/p/14390376.html