新增:主题退订

This commit is contained in:
lxy
2020-12-08 19:31:15 +08:00
parent 10472078b0
commit a37f1b9564
4 changed files with 42 additions and 31 deletions

View File

@@ -35,18 +35,14 @@ public abstract class KafakConsumer extends AbstractConsumer implements IConsume
public abstract String getGroupid();
private final LinkedBlockingQueue<EventType> queue = new LinkedBlockingQueue<>();
private final LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
@Override
public void addEventType(EventType... eventTypes) {
super.addEventType(eventTypes);
try {
for (EventType eventType : eventTypes) {
queue.put(eventType);
}
} catch (InterruptedException e) {
logger.log(Level.WARNING, "", e);
}
// 增加变更标记
queue.add(() -> logger.info("KafakConsumer starting..."));
}
@Override
@@ -58,8 +54,6 @@ public abstract class KafakConsumer extends AbstractConsumer implements IConsume
props = new Properties();
props.load(fis);
if (logger.isLoggable(Level.INFO)) logger.info(getGroupid() + " consumer started!");
new Thread(() -> {
try {
props.put("group.id", getGroupid());
@@ -78,9 +72,12 @@ public abstract class KafakConsumer extends AbstractConsumer implements IConsume
}
});
// 动态新增订阅
while (!queue.isEmpty()) {
queue.clear();
if (!queue.isEmpty()) {
Runnable runnable;
while ((runnable = queue.poll()) != null) {
runnable.run();
}
consumer.unsubscribe();
consumer.subscribe(getTopics());
}
@@ -95,5 +92,8 @@ public abstract class KafakConsumer extends AbstractConsumer implements IConsume
}
}
@Override
public void unsubscribe(String topic) {
queue.add(() -> eventMap.remove(topic)); // 加入延时执行队列(下一次订阅变更检查周期执行)
}
}