OpenMQ中的JMS与JMX

4 十月, 2010 (11:42) | GlassFish, JMS, Java消息中间件, openmq 繁体 English    DeliciOus    分享到新浪微博
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.javabloger.com/article/glassfish-jms-server-openmq-management-using-jmx.html
豆瓣读书 向你推荐有关 GlassFishJMSJava消息中间件openmq、 类别的图书。

 
我的废话:
为了能够满足强大的Java计算环境与分布式系统中管理的问题,Sun公司对Java基础类库进行了扩充开发了专用的Java管理扩展类库
(Java Management Extensions)。利用JMX的标准可以对JEE服务器的资源进行性能监控,管理和统计各类应用服务器运行时的信息。
JMX中有很多内容,本文只针对如何操作JMS服务器 OpenMQ产品进行阐述,讨论JMX层次与架构的相关话题暂时不是本文的重点。

http://blogs.sun.com/theaquarium/resource/OpenMQDuke-85_99px.gif

OpenMQ提供了一套非常完备的JMX MBeans管理接口,使用MBeans可以对OpenMQ服务器进行监控就像我们通常使用OpenMQ中的命令imqcmd一样方便,还记得JDK中的JConsole工具吗?可以对Java JDK 运行的状态进行监控和管理。在之前的文章里我提到可以通过imqcmd命令对OpenMQJMS服务器进行管理监控,但客户提出要一个web界面下管理多台集群下的JMS服务器工具,并且还需要和现有的系统管理工具进行集成,此时还不得不去使用JMX MBeans对OpenMQ JMS服务器进行管理监控,因为我们找不到比这个更好的办法。

可以使用JEE规范中的JMX协议进行管理OpenMQ中的集群管理节点(managing brokers)、服务(admin/jms)、消息队列(destinations), 接收者(consumers), 生产者(producers),还可以JMS服务器监控连接状态,查看发送的消息内容。

我们可以通过OpenMQ提供的imqjmx.jar API 编写代码调用JMX对OpenMQ服务器进行性能监控,在这个基础上还可以对JMS服务器的配置进行优化,还可以写一个OpenMQ JMX 的客户端对服务器进行自动化的监控和自动维护,例如,发现某个消息队列堵塞消息可以立刻通知管理员,或者发现堵塞消息后可以采用其他方式将消息拿下来再次发送一遍,使用这样的方式可以比原来的imqcmd命令对JMS服务器进行管理和监控更进一步。

下面我们来看看通过OpenMQ提供的API结合下面的Java代码可以将正在运行的JMS服务器停止,代码如下:

AdminConnectionFactory  acf = new AdminConnectionFactory();             //#1
acf.setProperty(AdminConnectionConfiguration.imqAddress, "192.168.1.1:7677");    //#2
JMXConnector  jmxc = acf.createConnection("admin", "admin");          //#3
MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();           //#4
ObjectName  serviceConfigName = MQObjectName.createServiceConfig("jms");            //#5
mbsc.invoke(serviceConfigName, ServiceOperations.PAUSE, null, null);                            //#6
// mbsc.invoke(serviceConfigName, ServiceOperations.RESUME, null, null);                     //#6
jmxc.close();                                                           //#7

执行以上代码需要引入 imqjmx.jar 这个就是通过JMX调用OpenMQ的API,这个文件在OpenMQ服务器的lib文件下面,也就是说在运行的OpenMQ服务器上肯定有这个jar包,不要再去google或者去sun网站下载jar包了。
#1 首先我们初始化一个管理的连接工厂,AdminConnectionFactory这个程序在AP I的 jar包中,
#2 写入被管理的OpenMQ的服务器地址和端口号,例如 127.0.0.1:7676
#3 还需要写上OpenMQ服务器的管理员用户名和密码,
#4 开始通过 MBean server连接OpenMQ服务器
#5 指定一个OpenMQ服务器上的服务名称,默认名称是jms,
#6对OpenMQ服务器进行具体的操作,ServiceOperations.PAUSE 和 ServiceOperations.RESUME是对服务器执行的2种不同的命令
#7关闭连接

如图所示,第一行第3个字段中 出现了“PAUSED”的字样,说明刚刚执行的程序生效了:

查看大图请点击这里

 

来看另外一个示例,通过OpenMQ 的 JMX API获取某个队列中生产者最大的连接数量,

AdminConnectionFactory  acf = new AdminConnectionFactory();             //#1
acf.setProperty(AdminConnectionConfiguration.imqAddress, "192.168.1.100:7676");    //#2
JMXConnector  jmxc = acf.createConnection("admin", "admin");          //#3
MBeanServerConnection  mbsc = jmxc.getMBeanServerConnection();           //#4   
ObjectName  destConfigName= MQObjectName.createDestinationConfig(DestinationType.QUEUE, "sms");     //#5
Integer  attrValue= (Integer)mbsc.getAttribute(destConfigName,DestinationAttributes.MAX_NUM_PRODUCERS);    //#6
System.out.println( "Maximum number of producers: " + attrValue );
jmxc.close();                                                       // #7

#1 和 #2填写一些必要的连接参数,例如,连接地址、端口和用户名、密码
#3 开始创建一个JMX的连接
#4 得到了一个到OpenMQ的MBean服务器的连接
#5 获得Queue属性的smsQueu消息队列上的属性
#6 通过 DestinationAttributes.MAX_NUM_PRODUCERS 命令查看sms消息队列上的生产者最大的连接数,
#7.关闭连接

如图所示:

查看大图请点击这里

看见上图中2处100的数字了吗?说明上面的程序读取到了sms消息队列中的属性了。
 

相关文章
重谈GlassFish服务器优化
OpenMQ命令
GlassFish OpenMQ JDBC
Spring集成 JMS OpenMQ
百万级 大型J2EE Push Mail 项目后记 3
GlassFish JMS 集群
 

–end–
 

豆瓣读书  向你推荐有关 GlassFish JMS Java消息中间件 openmq、 类别的图书。



Creative Commons License
本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。

评论

评论也是有版权的!




9358