[英]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.