java中间件karaf_OSGi 系列(十四)之 Event Admin Service

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

233cd0253b13a7f4df3441f3b10da5aa.png

(2) Topic 的规范

/不能用于开头或者结尾

可以使用 A-Z,a-z,0-9,-,_

2. 快速入门

2.1 环境准备

org.osgi

org.osgi.core

5.0.0

org.osgi

org.osgi.compendium

5.0.0

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 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 配制

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">

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 配制

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">

2.5 karaf 测试

# 查看 EventAdmin 服务是否发布

ls EventAdmin

# 安装 eventadmin

feature:list | grep eventadmin

feature:install eventadmin

984f55bde3223ffe62eed8fea0c37093.png

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

3. 事件过滤

3.1 基于主题的过滤

3.2 基于内容的过滤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值