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

可以使用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关闭连接
来看另外一个示例,通过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–

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






