у вас может быть два класса реализации, например 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);
}
}