博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IBM WebSphere MQ / Omegamon XE for Messaging / ActiveMQ 5.9 / Apache Artemis
阅读量:4078 次
发布时间:2019-05-25

本文共 14532 字,大约阅读时间需要 48 分钟。

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 集群工作负载平衡

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

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

//192.168.134.183

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

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("
TestESB
esbmqTest
OMSD
749137bc7ffe4031898733fe68decfed4fc58f98e8ac48f1
POAS;bv15Z0a83Uc3
M
2283575567253458
11011982886
2016-10-30
14:36:45
TMALL
MOBILE
1
2
9.9
9.89
0.0
0.0
Y
1
e
6116427259
0822zhaoxing
02
璧垫槦
69
6901
0.01
42
4232
9.89
24.6
2283575567253458
11014882503
ZOR
Z15783118
10
50
PC
1900
858C
858C
01
000000000131225835
浜旂緤瀹濆疂涓撶敤娲楄。娑?00ml脳3琚嬪疂瀹濅笓鐢ㄨ。鐗╂竻娲佸墏琛ュ厖瑁?/cmmdtyName>
10
R9003453
00019G754
0
0
9.9
1
SO1
9.9
0.01
0.0
0.0
0.0
0.0
0.0
D017
0001
0010058636
store001
2
T100018746
0
9120201
J
2016-10-31
18:00:00
2016-10-30
00:00:00
1234
2
D017
1.0
鑻忓畞
0;;姒嗘灄甯?绁炴湪鍘?绁炴湪闀?;;;绁炴湪闀囩閫氳矾涓氬叕鍙稿皬鍖轰竴鍙锋ゼ浜屽崟鍏?01
9120201
69
6901
0.01
2016-10-30
14:36:56
42
4232
9.89
2016-10-30
14:36:56
10
璧垫槦
15029730858
719300
912
0;;姒嗘灄甯?绁炴湪鍘?绁炴湪闀?;;;绁炴湪闀囩閫氳矾涓氬叕鍙稿皬鍖轰竴鍙锋ゼ浜屽崟鍏?01
01
11
"); // 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

你可能感兴趣的文章
WPF中PATH使用AI导出SVG的方法
查看>>
QT打开项目提示no valid settings file could be found
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
Encoding Schemes
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
linux和windows内存布局验证
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>
搞定Java面试中的数据结构问题
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>