[英]Common message broker interface for Kafka and ActiveMQ
我想设计一个接口,用于在 spring 启动微服务之间简单地发送和接收消息。 任何服务都应该能够自动连接接口并使用发送/接收方法。 这些方法的实现应该取决于 application.props 文件是要使用 kafka 还是 activemq。 我无法想出一个干净的设计。 我在想是否可以为它创建一个自定义注释。 无论 spring 启动体验如何,我都无法想象这样的设计。 骨架看起来像下面的东西,但我无法看到如何将其实现为正确的代码:bean,在 kafka/activemq 特定注释和方法之间切换,等等。
服务:
@Autowired MessageProducer messageProducer
@Autowired MessageReceiver messageReceiver
MessageProducer [接口] public void sendMessage(destination, payload)
MessageReceiver [接口] public void receiveMessage(source, payload)
你可以有两个实现类,比如KafkaMessageProducer
和ActvieMQMessageProducer
。 在application.properties
中,你可以有像 messinging.type messaging.type=kafka
或 messinging.type messaging.type=activemq
这样的配置,它将指定应该应用 select 的消息通信。
配置 class:
@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();
}
}
如果您想在同一个应用程序中使用这两种消息类型(例如,一个服务 class 将使用 Kafka,而另一个 class 将使用 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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.