java - 如何获取OSGI主题的消费者数量?

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

我正在使用 Osgi (Karaf) EventAdmin 使用 post 事件将数据从更改数据捕获线程广播到我的 OSGI 容器中的某些包,并且我想在主题或 channel 没有消费者时停止线程。 我从一个简单的例子开始,这就是我广播事件的方式:

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 );
}
}

有没有办法检查 channel 或队列上是否有消费者?

最佳答案

您可以使用您的主题作为属性来跟踪 EventHandler 服务,并在没有更多处理程序时使用react。

关于java - 如何获取OSGI主题的消费者数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43755256/

相关文章:

osgi - 无法捕获 Apache Karaf 客户端输出

java - Jersey - 来自资源的大量延迟调用服务方法

java - 包含对实现代码的引用的 OSGi 导出 API 安全吗?

OSGi 强制捆绑使用不同的配置启动两次

记录 Camel 异常并发送到死信 channel

grails - Karaf 4上的Grails3。有人设法做到了吗?

java - 在 Java 中解析持续时间,如 "time=+1d1h55m15s584ms"

java - 在数据类型为动态的arraylist中查找null并在java中对其进行排序

java - 如何在 Java 中制作 Windows 7 工具提示

java - OSGI 上的 Shiro 注释