kafka和activemq的公共消息代理接口

eaf3rand  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(368)

我想设计一个接口,用于在springboot微服务之间简单地发送和接收消息。任何服务都应该能够自动连接接口并使用发送/接收方法。这些方法的实现应该取决于,比如application.props文件是否要使用kafka或activemq。我不能想出一个干净的设计。我在想是否可以为它创建一个自定义注解。无论我有什么Spring Boot 的经验,我无法想象这样的设计。这个框架看起来像下面的东西,但是我不知道如何将它实现为正确的代码:bean,在kafka/activemq特定的注解和方法之间切换,等等诸如此类的东西。
服务:
@自动连线messageproducer messageproducer
@自动连线消息接收器消息接收器
messageproducer[interface]public void sendmessage(目标,负载)
messagereceiver[接口]public void receivemessage(源,负载)

nbysray5

nbysray51#

您可以有两个实现类,如 KafkaMessageProducer 以及 ActvieMQMessageProducer . 内部 application.properties 你可以这样做 messaging.type=kafka 或者 messaging.type=activemq 它将指定应用程序应选择哪个消息传递通信。
配置类:

@Configuration
public class MessagingConfiguration {

    @Bean
    @ConditionalOnProperty(name = "messaging.type", havingValue = "kafka")
    public MessageProducer messageProducer() {
        return new KafkaMessageProducer();
    }

    @Bean
    @ConditionalOnProperty(name = "messaging.type", havingValue = "activemq")
    public MessageProducer messageProducer() {
        return new ActvieMQMessageProducer();
    }
}

如果您想在同一个应用程序中使用这两种消息传递类型(例如,一个服务类将使用kafka,而另一个类将使用activemq),那么创建两个bean(如上所述,但是 @Qualifier 而且没有 @ConditionalOnProperty ). 在每个需要消息生产者的服务上,用 @Qualifier 您需要哪种实现

@Configuration
public class MessagingConfiguration {

    @Bean
    @Qualifier("kafkaMessageProducer")
    public MessageProducer messageProducer() {
        return new KafkaMessageProducer();
    }

    @Bean
    @Qualifier("actvieMQMessageProducer")
    public MessageProducer messageProducer() {
        return new ActvieMQMessageProducer();
    }

    @Bean
    public YourService messageProducer(@Qualifier("kafkaMessageProducer") MessageProducer messageProducer) {
        return new YourServiceImpl(messageProducer);
    }
}

相关问题