我尝试将 apache Kafka 引入我们的项目,并将项目架构更改为生产者-消费者。我尝试了一个新的测试项目。例如,我有一个生产者和两个消费者。它是不同的spring-boot应用程序(微服务)。
在生产者服务中,我需要配置Kafka,创建mean accuracy
。在每个使用者中,我需要配置Kafka并创建处理程序(带有KafkaTemplate
批注的方法)。
例如,明天我们将要更改Kafka的名称,我们将@KafkaListener
和带有KafkaTemplate
批注的方法更改为新库的实现。这不是一个好方法。因此,我认为我们需要创建包装器。像这样:
@KafkaListener
并在此接口的实现中封装KafkaTemplate(public interface EventBus {
void sendMessage(String topicName, String message);
}
)
我开始执行它,但是我面对一个事实,就是我不知道如何去做。我使用“事件总线”名称创建一个Gradle模块。这个模块不是spring-只是java模块。我创建KafkaEventBus implements EventBus
接口并实现它:
EventBus
卡住了。我有问题:
1)我需要创建其他模块(事件总线)吗?我觉得对吗?
2)如何在此模块中实现消息处理?如果发送的内容是明确的(封装public class KafkaEventBus implements EventBus {
private final KafkaProducer<String, String> kafkaProducer;
public KafkaEventBus() {
this.kafkaProducer = new KafkaProducer<>(producerConfig());
}
@Override
public void sendMessage(String topicName, String message) {
kafkaProducer.send(new ProducerRecord<>(topicName,message));
}
private Map<String, Object> producerConfig() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return configProps;
}
}
并将消息委托给它),然后进行处理
ничегонепонятно
没有什么清楚的。
也许,有一些最佳实践的例子吗?