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) ;
factory. setAutoStartup ( false ) ;
return factory;
}
@KafkaListener ( id = KAFKA_LISTENER_ID , topics = { "#{'${receiveTopics}'.split(',')}" } , containerFactory = "ackContainerFactory" )
public void message ( ConsumerRecord < String , String > record) {
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" ) ;
…………处理操作
}
public void stop ( ) {
log. info ( "kafkalistener stop..." ) ;
registry. getListenerContainer ( KAFKA_LISTENER_ID ) . stop ( ) ;
}
public void start ( ) {
log. info ( "kafkalistener start..." ) ;
if ( ! registry. getListenerContainer ( KAFKA_LISTENER_ID ) . isRunning ( ) ) {
registry. getListenerContainer ( KAFKA_LISTENER_ID ) . start ( ) ;
}
registry. getListenerContainer ( KAFKA_LISTENER_ID ) . resume ( ) ;
}
}
import com. phy. bcs. common. util. spring. SpringContextHolder ;
@SpringBootApplication ( )
@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 ) ;
if ( kafkaProperties. getStartOrNot ( ) == 1 || kafkaProperties. getStartOrNot ( ) == 3 ) {
kafkaReceiver. stop ( ) ;
log. info ( "关闭监听kafka" ) ;
} else {
kafkaReceiver. start ( ) ;
log. info ( "打开监听kafka" ) ;
}
}
}
其他步骤
kafka服务自带zookeeper下载与启动 Spring boot配置kafka服务 kafka生产者发送消息成功回调 kafka根据ip端口获取消息队列上的topic kafka动态设置监听哪些topic 动态启动关闭kafka监听、设置默认不监听kafka kafka设置:1只接受消息、不发送消息;2只发送消息不接受消息;3既接受消息也发送消息;4既不接收消息也不发送消息 kafka会把历史数据都获取下来 Spring boot kafka执行多次多次消费