如何获得OSGI主题的消费者数量?

时间:2017-05-03 08:45:48

标签: java osgi apache-karaf change-data-capture

我正在使用Osgi(Karaf)EventAdmin使用post事件将数据从一个更改Data Capture线程广播到我的OSGI容器中的一些bundle,并且我想在没有该主题或频道的消费者时停止该线程。 我从一个简单的例子开始,这就是我如何编辑事件:

ServiceTracker eventAdminTracker = new ServiceTracker(context, EventAdmin.class.getName(), null);
 eventAdminTracker.open();
 eventAdmin = (EventAdmin) eventAdminTracker.getService(); 
cdcEvent.put("DataChange",new String(source, offset, length) );
Event event =  new Event(POST_EVENT_QUEUE, cdcEvent);
eventAdmin.postEvent(event);

这个事件处理程序

Dictionary dp = new Hashtable();
dp.put(EventConstants.EVENT_TOPIC, POST_EVENT_QUEUE);
context.registerService(EventHandler.class.getName(), new PostEventHandler(), dp)

....

public class PostEventHandler implements EventHandler{
@Override
public void handleEvent(Event event) {
String value = event.getProperty("DataChange").toString();
System.out.println("value from dataSource : "+value );
}
}

有没有办法检查频道或Queu上是否有消费者?

1 个答案:

答案 0 :(得分:3)

您可以将您的主题作为属性跟踪EventHandler服务,并在没有其他处理程序时做出反应。