栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot中kafka监听不同topic,走不同代码逻辑的模式实现思路(便于扩展维护,解耦合)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot中kafka监听不同topic,走不同代码逻辑的模式实现思路(便于扩展维护,解耦合)

一、建一个工厂类实现如下,springboot启动时将不同的监听实现类,存于定义的map中,便于监听后调用。 

@Component
@RequiredArgsConstructor
public class KafkaFactory implements InitializingBean, ApplicationContextAware {
    private ApplicationContext appContext;

    private static final Map KAFKA_MAP = new HashMap<>();

    public static KafkaFactory getHandler(String topic) {

        return KAFKA_MAP.get(topic);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        appContext.getBeansOfType(KafkaFactory.class).values().forEach(handler -> {
            KAFKA_MAP.put(handler.getTopic(), handler);
        });
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        appContext = applicationContext;
    }

}

二、接口 KafkaDeal,定义kafka监听实现类的动作,例如当前实现类 监听的topic名称、执行代码等。以后若新增监听,只需增加此接口的实现类.

public interface KafkaDeal {

    String getTopic();

    void excute(String msg);
}

三、 KafkaDeal的监听topic实现类(举例,多监听多实现类)

@Service
@RequiredArgsConstructor
@Slf4j
public class ThirdDocKafkaDealBankGua implements ThirdDocKafkaDeal {


    @Override
    public String getTopic() {
        return "kafka_topicName1";
    }

    @Override
    public void excute(String msg) {
    //监听执行的逻辑代码.....
    }
}

四、kafka监听代码,调用KafkaFactory 


@Component
@Slf4j
public class ExternalPaymentListener {
     
    @KafkaListener(groupId = "kafka_group1", topics = "kafka_topicName1")
    public void TopicMessage1(String message) {
        KafkaDeal deal = KafkaFactory.getHandler("kafka_topicName1");
        deal.excute(message);
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号