首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有在某些条件为真的情况下,才能使用Kafka的消息

只有在某些条件为真的情况下,才能使用Kafka的消息
EN

Stack Overflow用户
提问于 2019-12-16 05:29:48
回答 2查看 2K关注 0票数 1

我们有特定的主题,只有在条件consumeEnabled=true的情况下才需要使用消息。所以,它应该是这样的:

如果应用程序正在启动并使用

  1. ,则将分区分配给使用者并使用来自主题的消息。如果应用程序正在启动,则不要将分区分配给用户,也不要使用来自主题的消息。如果应用程序已经与consumeEnabled=false一起运行,但在运行时属性变为consumeEnabled=true,则在运行时将分区分配给使用者,并使用来自主题的消息。

当应用程序正在消耗信息时,consumeEnabled就会变成假的,而不必考虑。

请使用Spring和\或Kafka客户端定义实现决策的最佳方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-16 13:51:54

如果您正在使用@KafkaListener,那么

代码语言:javascript
运行
复制
@KafkaListener(id = "foo", ... , autoStartup="${consume.enabled}")

其中consume.enabled是一个属性。

要在运行时启动/停止容器,请使用KafkaListenerEndpointRegistry bean。

代码语言:javascript
运行
复制
registry.getListenerContainer("foo").start();
票数 6
EN

Stack Overflow用户

发布于 2019-12-16 06:14:41

您可以将您的使用者放在一个简单的线程中,以切换使用者对象的轮询状态。

代码语言:javascript
运行
复制
public class EnabledConsumer implements Runnable {

    private Consumer consumer;
    private boolean enabled;

    public EnabledConsumer(Consumer consumer, boolean enabled) {
        this.consumer = consumer;
        this.enabled = enabled;
    }

    public void setEnabled(boolean enable) {
        this.enabled = enable;
    }

    @Override
    public void run() {
        while(enabled) {
            ConsumerRecords records = consumer.poll(...);
            ...
        }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59350993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档