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. 用javac编译servlet类出现问题

    本人写了一个关于servlet的webapp,但是在用javac编译的时候,只是单纯的将jsp-api.jar和servlet-api.jar拷贝放在了其目录下面,然后利用命令行 javac XXX. ...

  2. Tornado之模板

    知识点 静态文件配置 static_path StaticFileHandler 模板使用 变量与表达式 控制语句 函数 块 4.1 静态文件 现在有一个预先写好的静态页面文件 (下载静态文件资源), ...

  3. sqoop1 与sqoop2的对比

    Sqoop是一款开源的工具,主要用于在Hadoop和传统的数据库(mysql.postgresql等)进行数据的传递,可以将一个关系型数据库(例如:MySQL.Oracle.Postgres等)中的数 ...

  4. 楼层验证B1~1F等

    $("#mapManagerEditForm").bootstrapValidator("addField","floors",{ vali ...

  5. Alpha版本检测报告

    1.Alpha版本测试报告 发布一篇随笔,作为项目的测试报告,内容包括: (1)测试计划 测试人员 工作安排 覃一霸 编写测试报告 张江波 执行测试.截图测试结果 测试功能 功能 描述 效果 结果 登 ...

  6. VB6 padleft padright

    Public Function PadLeft(ByVal s As String, ByVal i As Integer, ByVal c As String)    If i > LenB( ...

  7. 对 /dev/shm的认识

    一./dev/shm理论 默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录.可以通过df 命令查看结果./dev/shm/是linux下一个非常有用的目录,因为这 ...

  8. Haskell语言学习笔记(63)Dicidable

    Dicidable class Divisible f => Decidable f where lose :: (a -> Void) -> f a choose :: (a -& ...

  9. cookie保存用户名及密码

    登陆页中,用户输入用户名密码,点击提交,后台对照mysq数据库中,看是否有对应的用户名,以及密码是否正确.如果正确 则将用户名密码分两份Cookie保存.页面跳转到登陆成功页. 用户再次访问登陆页时, ...

  10. js中常用的事件

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