OSGi 系列(十四)之 Event Admin Service

OSGi 的 Event Admin 服务规范提供了开发者基于发布/订阅模型,通过事件机制实现 Bundle 间协作的标准通讯方式。

事件发布者使用 Event Admin 服务发送基于主题 (Topic) 的事件,任何对某一主题感兴趣的事件订阅者都会收到该事件,并且做出相应的反应。

1. Event Admin Service 介绍

(1) Event Admin Service 规范

compendium 规范提供了 Event Admin Service 服务,具体规范见 org.osgi.service.event

(2) Topic 的规范

  • /不能用于开头或者结尾
  • 可以使用 A-Z,a-z,0-9,-,_

2. 快速入门

2.1 环境准备

<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>5.0.0</version>
</dependency>

2.2 新建 2 个 bundle,一个发布事件(osgi-event-publish),一个接收事件(osgi-event-subscribe)

2.3 发布事件(osgi-event-publish)

import java.util.HashMap;
import java.util.Map; import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin; public class EventPublish { private EventAdmin eventAdmin; public void publish() {
Map<String, String> content = new HashMap<>();
content.put("phone", "10086");
content.put("content", "ye");
eventAdmin.postEvent(new Event("send/10086", content));
} public void setEventAdmin(EventAdmin eventAdmin) {
this.eventAdmin = eventAdmin;
}
}

blueprint.xml 配制

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> <reference id="eventAdmin" interface="org.osgi.service.event.EventAdmin" /> <bean class="com.edu.osgi.event.publish.EventPublish" init-method="publish">
<property name="eventAdmin" ref="eventAdmin" />
</bean>
</blueprint>

2.4 接收事件(osgi-event-subscribe)

import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler; public class SendEventHandler implements EventHandler { public void handleEvent(Event event) {
System.out.println("=======handleEvent=======");
System.out.println(event.getTopic()); for(String key : event.getPropertyNames()) {
System.out.println(key + "=" + event.getProperty(key));
}
}
}

blueprint.xml 配制

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> <service interface="org.osgi.service.event.EventHandler">
<service-properties>
<entry key="event.topics" value="send/*"/>
</service-properties>
<bean class="com.edu.osgi.event.subscribe.SendEventHandler" />
</service>
</blueprint>

2.5 karaf 测试

# 查看 EventAdmin 服务是否发布
ls EventAdmin
# 安装 eventadmin
feature:list | grep eventadmin
feature:install eventadmin

注意: osgi-event-subscribe 只能处理启动后发布的事件,不能处理启动前的事件。

3. 事件过滤

3.1 基于主题的过滤

<service interface="org.osgi.service.event.EventHandler">
<service-properties>
<entry key="event.topics" value="send/*"/>
</service-properties>
<bean class="com.edu.osgi.event.subscribe.SendEventHandler" />
</service>

3.2 基于内容的过滤

<service interface="org.osgi.service.event.EventHandler">
<service-properties>
<entry key="event.topics" value="send/*"/>
<entry key="event.filter" value="(phone=10010)"/>
</service-properties>
<bean class="com.edu.osgi.event.subscribe.SendEventHandler" />
</service>

OSGi 系列(十四)之 Event Admin Service的更多相关文章

  1. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  2. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  4. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  5. 【Qt编程】基于Qt的词典开发系列<十四>自动补全功能

    最近写了一个查单词的类似有道词典的软件,里面就有一个自动补全功能(即当你输入一个字母时,就会出现几个候选项).这个自动补全功能十分常见,百度搜索关键词时就会出现.不过它们这些补全功能都是与你输入的进行 ...

  6. kubernetes系列(十四) - 存储之PersistentVolume

    1. PersistentVolume(PV)简介 1.1 为什么需要Persistent Volume(PV) 1.2 PersistentVolume(PV)和Volume的区别 1.3 PV和P ...

  7. WPF入门教程系列十四——依赖属性(四)

    六.依赖属性回调.验证及强制值 我们通过下面的这幅图,简单介绍一下WPF属性系统对依赖属性操作的基本步骤: 借用一个常见的图例,介绍一下WPF属性系统对依赖属性操作的基本步骤: 第一步,确定Base ...

  8. BizTalk开发系列(十四) XML空白字符(WhiteSpace)

    最近在做一个BizTalk项目,对XML文件的处理很复杂.本来是想找有没有方法可以一次性去除XML文件中节点和属性的值的空格.但是找了很久没有看到相关的方法.如果有知道该方法的麻烦跟我讲一下:cbcy ...

  9. Esper系列(十四)Contained-Event Selection

    功能:该语法是针对所查询事件中的属性又是另一种属性的查询结果控制. 格式: 1  "+j); 19      bean.setBean(item); 20      list.add(bea ...

随机推荐

  1. C语言中字符串存储方法

    众所周知,C语言中没有数据类型能够存储字符串, char数据类型仅仅能够存储一个字符的数据,那么在C语言中关于存储字符串这一难题我们改何去何从呢? 下面将详述相关的字符串存储方法; 1,使用字符数组存 ...

  2. HTML5 Canvas ( 画一个五角星 ) lineJoin miterLimit

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. nodejs发送http请求

    var request = require('request'); var options = { method: 'post', url: u, form: content, headers: { ...

  4. TTreeView.OnCustomDrawItem

    TTreeNode *node; node = , "AAAA"); TreeView1->Items->AddChild(node, "aaa1" ...

  5. WebConfig配置讲解

    http://www.cnblogs.com/cyq1162/archive/2006/11/16/562690.html sqlserver配置数据库连接字符串时需分2种情况 windows 和 s ...

  6. 修改thinkpad 小红点(TrackPoint速度)

    from: http://www.jianshu.com/p/b9677e9e56ec Thinkpad大概是对Linux支持最好的笔记本了,Ubuntu大概是对硬件支持最好的Linux发行版了.Ub ...

  7. Delphi 解析系统环境变量

    // http://www.outofmemory.cn function ExpandEnvironment(const strValue: string): string; var chrResu ...

  8. Windows驱动手动卸载与安装

    彻底卸载的流程 1.删除C:\windows\inf\oem.inf路径下的所有oem文件 2.删除c:\windows\system32\drivers路径下对应的sys文件 3.(重要) 第一步: ...

  9. java heap space解决方法和JVM参数设置

    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...

  10. docker 操作

    docker daemon 设置代理 http_proxy=109.105.4.17:8118 & systemctl start docker centos: Edit /etc/sysco ...