如何获取 OSGI 主题的消费者数量?
How to get the number of consumers of an OSGI topic?
我正在使用 Osgi (Karaf) EventAdmin 通过 post 事件将更改数据捕获线程中的数据广播到我的 OSGI 容器中的一些包,我想在没有消费者时停止该线程主题或频道。
我从一个简单的例子开始,这就是我广播事件的方式:
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 );
}
}
有没有办法检查频道或队列中是否有消费者?
您可以使用您的主题作为 属性 跟踪 EventHandler 服务,并在没有更多处理程序时做出反应。
我正在使用 Osgi (Karaf) EventAdmin 通过 post 事件将更改数据捕获线程中的数据广播到我的 OSGI 容器中的一些包,我想在没有消费者时停止该线程主题或频道。 我从一个简单的例子开始,这就是我广播事件的方式:
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 );
}
}
有没有办法检查频道或队列中是否有消费者?
您可以使用您的主题作为 属性 跟踪 EventHandler 服务,并在没有更多处理程序时做出反应。