欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/java/jmx-quick-start-2-condition/

Notification

一个MBean提供的管理接口允许代理对其管理资源进行控制和配置。然而,对管理复杂的分布式系统来说,这些接口知识提供了一部分功能。通常,管理应用程序需要对状态变化或者当特别情况发生变化时作出反映。Notification起到了MBean之间的沟通桥梁的作用。JMX Notification模型和Java Event模型类似,将一些重要的信息,状态的转变,数据的变更传递给Notification Listener,以便资源的管理。
通知模型仅仅涉及了在同一个JMX代理中的管理构件之间的事件传播。JMX通知模型依靠以下几个部分:

  1. Notification,一个通用的事件类型,该类标识事件的类型,可以被直接使用,也可以根据传递的事件的需要而被扩展。
  2. NotificationListener接口,接受通知的对象需实现此接口。
  3. NotificationFilter接口,作为通知过滤器的对象需实现此接口,为通知监听者提供了一个过滤通知的过滤器。
  4. NotificationBroadcaster接口,通知发送者需实现此接口,该接口允许希望得到通知的监听者注册。

发送一个通用类型的通知,任何一个监听者都会得到该通知。因此,监听者需提供过滤器来选择所需要接受的通知。任何类型的MBean,标准的或动态的,都可以作为一个通知发送者,也可以作为一个通知监听者,或两者都是。

这里采用一个案例来说明,前面的Hello中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:

小厮从对面走来,说:“hi”。我们回之以礼,说:“Hello, Xiaosi”.
首先这里需要小厮先说一个“hi”(相应一个操作方法),然后他说的话封装成了声波(Notification的消息包)传递出去。然后我们要给Hello类装上一个监听器(NotificationListener),这个监听器将捕捉到小厮的Notification消息包,然后回复说:“Hello, Xiaosi”.

引入新的类XiaoSi.java和XiaosiMBean:

package com.test.jmx.notification;import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;public class XiaoSi extends NotificationBroadcasterSupport implements XiaoSiMBean {private int seq = 0;/** 必需继承NotificationBroadcasterSupport* 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去* 如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用*/@Overridepublic void hi() {Notification n = new Notification(//创建一个信息包"xiaosi.hi",//给这个Notification起个名称this,//由谁发出的Notification++seq,//一系列通知中的序列号,可以设置任意数值System.currentTimeMillis(),//发出时间"Xiaosi"//发出信息的消息文本);sendNotification(n);}
}
package com.test.jmx.notification;public interface XiaoSiMBean {public void hi();
}

接下去创建Hello类的Listener(HelloListener.java),用于监听Notification的消息包并处理。

package com.test.jmx.notification;import com.test.jmx.Hello;import javax.management.Notification;
import javax.management.NotificationListener;public class HelloListener implements NotificationListener {@Overridepublic void handleNotification(Notification notification, Object handback) {System.out.println("----------HelloListener-Begin------------");System.out.println("\ttype = "+ notification.getType());System.out.println("\tsource = "+notification.getSource());System.out.println("\tseq = "+notification.getSequenceNumber());System.out.println("\tsend time = "+notification.getTimeStamp());System.out.println("\tmessage="+notification.getMessage());System.out.println("----------HelloListener-End------------");if (handback != null) {if (handback instanceof Hello) {Hello hello = (Hello)handback;hello.printHello(notification.getMessage());}}}
}

修改HelloAgent的代码:

package com.test.jmx.notification;import com.sun.jdmk.comm.HtmlAdaptorServer;
import com.test.jmx.Hello;import javax.management.*;
import java.lang.management.ManagementFactory;public class HelloAgent {public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException,
InstanceAlreadyExistsException, MBeanRegistrationException {MBeanServer server = ManagementFactory.getPlatformMBeanServer();ObjectName helloName = new ObjectName("MyMBean:name=HelloWorld");Hello hello = new Hello();server.registerMBean(hello,helloName);ObjectName adapterName = new ObjectName("MyBean:name=htmladapter,port=8082");HtmlAdaptorServer adapter = new HtmlAdaptorServer();server.registerMBean(adapter,adapterName);XiaoSi xs = new XiaoSi();server.registerMBean(xs,new ObjectName("MyMBean:name=xiaosi"));xs.addNotificationListener(new HelloListener(),null,hello);adapter.start();}
}

运行HelloAgent,然后在浏览器中输入localhost:8080, 点击“name=xiaosi”:

进入页面:

点击“hi”按钮,此时控制台打印:

----------HelloListener-Begin------------type = xiaosi.hisource = com.test.jmx.notification.XiaoSi@12f7757cseq = 1send time = 1476184927551message=Xiaosi
----------HelloListener-End------------
Hello, Xiaosi

参考资料

  1. JMX整理
  2. JMX简介
  3. http://blog.csdn.net/DryKillLogic/article/category/762777
  4. 用Apache的commons-modeler来辅助开发JMX

欢迎跳转到本文的原文链接:https://honeypps.com/java/jmx-quick-start-2-condition/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


从零开始玩转JMX(二)——Condition相关推荐

  1. 从零开始玩转JMX(四)——Apache Commons Modeler Dynamic MBean

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. 从零开始玩转JMX(一)——简介和Standard MBean

    JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展.这种机制可以方便的管理.监控正在运行中的Java程序.常用于管理线程,内存,日志Level,服 ...

  3. 从零开始玩转JMX(三)——Model MBean

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  4. 从零开始玩单反 相机参数之光圈/快门篇(转)

    开篇:光圈和快门是什么 <iframe style="padding: 5px 0px 5px 5px;" src="http://stat.zol.com.cn/ ...

  5. linux查看nas剩余大小,老徐玩NAS 篇二:我的群晖储存空间哪儿去了——100%破案的教程...

    老徐玩NAS 篇二:我的群晖储存空间哪儿去了--100%破案的教程 2019-05-26 23:28:21 74点赞 866收藏 36评论 前言 为了更好的体验Nas的功能,我前段时间终于安耐不住在J ...

  6. 从零开始学java(二十六)--多维数组,多维数组存储表格数据

    从零开始学java(二十六)--多维数组 多维数组 多维数组存储表格数据 多维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(学习 ...

  7. 【Microsoft Azure 的1024种玩法】二十六. 在Azure VM中手动部署Windows Admin Center管理平台

    [简介] Windows Admin Center是微软开发的一套可以部署在本地基于浏览器的GUI的工具集平台,其平台可用于管理Windows相关服务器和PC机器,我们可以利用Windows Admi ...

  8. 从零开始玩rv1126core板(零)

    从零开始玩rv1126core板 欢迎大佬指导工作 Ubuntu虚拟机搭建 软件准备: 相关指令 rv1126开发工具使用 软件下载 欢迎大佬指导工作 雪薇c语言基础,linux系统操作指令基础,st ...

  9. 【Microsoft Azure 的1024种玩法】二十四.通过Azure Front Door 的 Web 应用程序防火墙来对 OWASP TOP 10 威胁进行防御

    [简介] 我们都知道像 SQL 注入.跨站点脚本攻击(XSS)之类的恶意攻击以及 OWASP 发现的十大威胁都可能会导致服务中断或数据丢失,让 Web 应用程序所有者受到巨大威胁.那么如何有效的解决O ...

最新文章

  1. java for index_Java增强for循环中获取index
  2. sql中去掉换行符和回车符
  3. Python+selenium 自动化-通过窗口名切换窗口,如何获取当前窗口的title窗口名
  4. python使用ddt_python使用ddt模块对用例执行操作
  5. T-SQL:流程控制 4,Case 语句
  6. 如何搭建html运行环境,搭建真实的运行环境2019.4.22
  7. jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用
  8. 2018秋季C语言学习总结
  9. ASP.NET自定义错误页面
  10. win10装系统--笔记
  11. 防止SQL注入的五种方法
  12. 兄弟7895dw粉盒清零_兄弟brother打印机清零大全
  13. Visual Studio Community 2017安装步骤(只装C++)
  14. unity简单技能系统
  15. 3d建模网上学习靠谱吗?学3d建模哪个大学好?
  16. python3.5 爬取bing搜索结果页面标题、链接
  17. 【Vue作业]---Vue登录注册界面
  18. 第四集 孤胆翻越橡皮山,丈量生命之厚度
  19. 计算机专业英语论文题目,英语毕业论文题目_英语论文题目参考(中英文对照)...
  20. 聚美自建的“真品联盟”被京东捅破的窗户纸

热门文章

  1. Nginx教程--配置
  2. 联发科mtk手机处理器怎么样_5G手机价格将再探新低!联发科天玑700芯片发布:入门级5G处理器...
  3. Java并发基础总结_Java并发编程笔记之基础总结(二)
  4. 【报错笔记】eclipse启动出现错误
  5. JAVA数据类型的转换及数据的原反补三码
  6. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制
  7. ios 获取视频截图
  8. readSerializableObj
  9. 运维监控之Nagios实战(五)Nagios QL3.11
  10. DeepEarth更新到Silverlight 4了