spring boot 动态启动关闭kafka监听、设置默认不监听kafka

spring boot 动态启动关闭kafka监听、设置默认不监听kafka、动态设置kafka监听哪些topic

//添加注解
@Component
@Slf4j
public class KafkaReceiver {
	@Autowired
	private KafkaListenerEndpointRegistry registry;
	
	public static final String KAFKA_LISTENER_ID = "KAFKA_ID";
	
	@Bean("ackContainerFactory")
	public ConcurrentKafkaListenerContainerFactory ackContainerFactory(ConsumerFactory consumerFactory){
		ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory();
		factory.setConsumerFactory(consumerFactory);
		/*
		设置默认不监听kafka设置的,如果默认监听的话,还没有等到
		程序关闭监听kafka服务时就会有一些kafka上的数据被拉下来了
		*/
		factory.setAutoStartup(false);
		return factory;
	}
	//动态设置监听哪些kafka
	@KafkaListener(id = KAFKA_LISTENER_ID,topics = {"#{'${receiveTopics}'.split(',')}"},containerFactory = "ackContainerFactory")
	public void message(ConsumerRecord<String, String> record) {
		//获取topic
		String topic = record.topic();
		//获取键值(有可能乱码)
		String flieName = new String(record.key().getBytes("UTF-8"),"UTF-8");
		//获取内容
		String valueTopic = new String(record.value().getBytes("UTF-8"),"UTF-8");
		…………处理操作
	}
	
	//关闭kafka监听方法
	public void stop(){
        log.info("kafkalistener stop...");
        registry.getListenerContainer(KAFKA_LISTENER_ID).stop();
    }
	
	//启动kafka监听方法
    public void start(){
        log.info("kafkalistener start...");
        //判断监听容器是否启动
        if (!registry.getListenerContainer(KAFKA_LISTENER_ID).isRunning()){
            registry.getListenerContainer(KAFKA_LISTENER_ID).start();
        }
        //项目启动的时候监听容器是未启动状态,resume是恢复的意思不是启动的意思
        registry.getListenerContainer(KAFKA_LISTENER_ID).resume();
    }
}
//启动项目

import com.phy.bcs.common.util.spring.SpringContextHolder;

@SpringBootApplication(/*exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}*/)
@Slf4j
public class Test{
    public static KafkaProperties kafkaProperties;
    
    public static void main(String[] args) throws UnknownHostException {
    
        KafkaReceiver kafkaReceiver = SpringContextHolder.getBean(KafkaReceiver.class);
    	//获取配置文件
        kafkaProperties = SpringContextHolder.getBean(KafkaProperties.class);
        //根据配置动态设置是否监听kafka
		if(kafkaProperties.getStartOrNot() == 1 || kafkaProperties.getStartOrNot() == 3){
            kafkaReceiver.stop();
            log.info("关闭监听kafka");
        } else {
            kafkaReceiver.start();
            log.info("打开监听kafka");
        }
	}
}

其他步骤

  1. kafka服务自带zookeeper下载与启动
  2. Spring boot配置kafka服务
  3. kafka生产者发送消息成功回调
  4. kafka根据ip端口获取消息队列上的topic
  5. kafka动态设置监听哪些topic
  6. 动态启动关闭kafka监听、设置默认不监听kafka
  7. kafka设置:1只接受消息、不发送消息;2只发送消息不接受消息;3既接受消息也发送消息;4既不接收消息也不发送消息
  8. kafka会把历史数据都获取下来
  9. Spring boot kafka执行多次多次消费
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值