将KafkaTemplate /处理方法封装在您自己的包装器中(以及如何包装)是否正确?

时间:2019-03-27 09:16:50

标签: java oop design-patterns spring-kafka design-principles

我尝试将 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; } } 并将消息委托给它),然后进行处理 ничегонепонятно 没有什么清楚的。

也许,有一些最佳实践的例子吗?

0 个答案:

没有答案