`
kongshanxuelin
  • 浏览: 913202 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

基于Ice发布订阅模式的预警系统的设计与实现

阅读更多

在几乎所有的业务系统或互联网应用中,预警系统几乎到处可见,预警系统主要分成2大模块:

 

  1. 预警系统条件的设置,可以基于Cron表达式或其他;
  2. 预警条件的提醒,可以是一个弹出窗,或者是后台自动发送一封邮件等;
预警条件的设置可以基于quartz开源框架,或者通过一个线程每隔N秒定时扫描,预警系统的难点在于在Web应用领域,后台触发的预警条件如何通知前台,因为Web是基于短连接的,实现思路可分为两大类,一类是实时的,一类是非实时的,本文主要实现基于Ice的实时预警提醒。

想要实现基于Ice的实时提醒,分以下步骤:
  1. 编写基于Applet的subscribe,让每个客户端订阅系统的预警主题;
  2. 每个subscribe收到预警提醒时,过滤非本文的预警提醒;
  3. 根据预警提醒设置,进行预警提醒;
这里使用的是发布—订阅模式,主要利用IceStorm,要使用IceStrom,必须启动IceBox,主要的技术点:

在JSP页面中嵌入Applet,并允许Applet中调用js函数,类似的代码如下:

<jsp:plugin archive="Ice.jar" code="youClass " width="20" height="20"  codebase="yourCodeBase" type="applet">
		<jsp:params>
			<jsp:param value="true" name="mayscript"/>
		</jsp:params>
</jsp:plugin>
编写基于Ice的发布主题Slice代码: 

interface PubScriAction
{
    void publishAlarm(ProductL2AlarmBean alarmbean);
    void publishTopic(string content);    
};
 
服务端向客户端发布主题调用代码:

        Publisher app = new Publisher();
        app.publishTopic("gjk_subscribe", String.valueOf(Math.random()));
        app.getCommunicator().destroy();

Applet中订阅某个主题: 

SubscriberNoArg app = new SubscriberNoArg(null);
app.subscribe("yourTopicName");

Applet中调用页面的js函数:

window = JSObject.getWindow(this);
window.call("exeOnsubscribeTopic", new Object[] {topic,"[applet]:"+str});

这里有一个Demo,展现了服务端发布一个主题时,客户端实时收到的效果:

 


 
 

 

  • 大小: 9.9 KB
1
4
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics