gpt4 book ai didi

java - 没有订阅者时如何删除主题?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:25 25 4
gpt4 key购买 nike

我正在构建一个创建主题树的扩散解决方案。

我正在按需创建主题以反射(reflect)从 RabbitMQ 提要接收到的值。每个主题都有内存成本,所以我希望在一段时间没有订阅者后删除该主题。

这如何使用统一的 Java API 完成?

最佳答案

TopicEventListener (TopicControl 功能的一部分)提供此功能。当主题有 0 个订阅者时以及主题至少有 1 个订阅者时提供单独的回调。

例子:

    public TopicEventListenerClient() {
session = Diffusion.sessions().principal("admin").password("password").open("ws://localhost:8080");
topicControl = session.feature(TopicControl.class);
topicControl.addTopicEventListener("rabbitMQ/foo", new TopicEventListener() {

@Override
public void onClose(String arg0) {
LOG.info("Listener closed");
}

@Override
public void onError(String arg0, ErrorReason arg1) {
LOG.info("Error on listener: " + arg1);
}

@Override
public void onRegistered(String arg0, Registration arg1) {
LOG.info("Listener registered");
}

@Override
public void onHasSubscribers(String arg0) {
LOG.info("Topic: " + arg0 + " has at least 1 subscriber");
}

@Override
public void onNoSubscribers(String arg0) {
LOG.info("Topic: " + arg0 + " has no subscribers");
}
});
}

希望这对您有所帮助!

编辑:2019 年 4 月 10 日

TopicEventListener已弃用(自 Diffusion 版本 6.1 起)。删除没有订阅者的主题的首选方法是 Automatic Topic Removal .这可以通过指定 Removal Policy 来实现作为主题规范的一部分。

例如:

final Session session = Diffusion.sessions().principal("admin").password("password").open("ws://localhost:8080");

final TopicControl topicControl = session.feature(TopicControl.class);

final TopicSpecification specification =
topicControl.newSpecification(TopicType.JSON)
.withProperty(TopicSpecification.REMOVAL, "when subscriptions < 1 for 10s");

以上代码为 JSON 主题创建了一个主题规范,如果 10 秒内没有订阅者,该主题将自动删除。

关于java - 没有订阅者时如何删除主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36089696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com