spring boot 项目本地起线上环境如何禁用kafka的消费

本地起线上环境如果不禁用kafka的消费,可能会存在本地消费kafka中的数据导致消息堆积的问题 。
本地起线上环境要禁用kafka可根据操作系统来禁用 Kafka 配置,首先,你可以在 Spring Boot 中通过检查操作系统类型来实现条件配置。可以使用 Spring @Conditional 注解结合一个自定义的条件类来判断系统是否Windows 或者mac系统。如果是 Windows 或者mac系统,就跳过 SecondKafkaConfig 的加载。

步骤 1: 创建一个自定义条件类

创建一个类来判断当前操作系统是否是 Windows 或者Mac系统。Spring 提供了 Condition 接口,可以自定义条件判断逻辑。

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class NotWindowsCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        // 获取当前操作系统名称
        String os = System.getProperty("os.name").toLowerCase();
        // 判断是否是 Windows 系统
        return !os.contains("win") && !os.contains("mac") ;
    }
}

步骤 2: 使用 @Conditional 注解来控制 Kafka 配置加载

在 SecondKafkaConfig 上使用 @Conditional 注解,并指定自定义条件类 NotWindowsCondition,这样只有在非 Windows 系统下才会加载该配置。

import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.config.KafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;

@Conditional(NotWindowsCondition.class)  // 只有在非Windows操作系统下才会加载此配置
@Configuration
@EnableKafka
public class SecondKafkaConfig {

    public static final String SECOND_KAFKA_LISTENER_CONTAINER_FACTORY_NAME = "secondKafkaListenerContainerFactory";

    @ConfigurationProperties(prefix = "spring.kafka.second")
    @Bean
    public KafkaProperties secondKafkaProperties() {
        return new KafkaProperties();
    }

    @Bean(SECOND_KAFKA_LISTENER_CONTAINER_FACTORY_NAME)
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Integer, String>> 
    secondKafkaListenerContainerFactory(@Autowired @Qualifier("secondKafkaProperties") KafkaProperties secondKafkaProperties) {
        ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
                new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(secondConsumerFactory(secondKafkaProperties));
        return factory;
    }

    private ConsumerFactory<? super Integer, ? super String> secondConsumerFactory(KafkaProperties secondKafkaProperties) {
        return new DefaultKafkaConsumerFactory<>(secondKafkaProperties.buildConsumerProperties());
    }
}

步骤 3: 配置 application.properties 或 application.yml

确保在 application.properties 或 application.yml 中配置了第二个 Kafka 的相关配置。例如:

spring.kafka.second.bootstrap-servers=localhost:9093
spring.kafka.second.consumer.group-id=my-group

解释

  • NotWindowsCondition:这是一个自定义条件类,判断当前操作系统是否是 Windows。如果是 Windows 或者MAC 系统,matches 方法返回 false,表示 SecondKafkaConfig 配置不加载。如果不是 Windows 系统,返回
    true,表示加载 SecondKafkaConfig 配置。
  • @Conditional(NotWindowsCondition.class):这个注解确保了SecondKafkaConfig 只会在非 Windows 系统下生效。如果是 Windows 系统,Kafka 配置不会被加载。

小结

通过这种方式,你可以根据操作系统类型(例如 Windows 或者Mac)来禁用 Kafka 配置,避免在不适合的环境中加载第二个 Kafka 配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值