使用ApacheKafkaJava和micronaut应用程序设计RESTAPI
在使用Micronaut框架处理Rest API CRUD操作时,我看到了上图。我有单向流,控制器需要知道从Kafka consumer API执行的操作 比如说使用ApacheKafkaJava和micronaut应用程序设计RESTAPI,java,apache-kafka,rx-java,micronaut,micronaut-kafka,Java,Apache Kafka,Rx Java,Micronaut,Micronaut Kafka,在使用Micronaut框架处理Rest API CRUD操作时,我看到了上图。我有单向流,控制器需要知道从Kafka consumer API执行的操作 比如说 要从数据库中获取所有项目列表,需要在使用者级别执行 消费者级别的添加/更新/删除操作 我有以下消费者级别(监听器)的Micronaut反应式代码,以从mongo DB获取产品列表 @Topic(ProductTopicConstants.GET_FREE_TEXT_SEARCH) public Flowable<Product&
@Topic(ProductTopicConstants.GET_FREE_TEXT_SEARCH)
public Flowable<Product> findByFreeText(String text) {
LOG.info(String.format("Listener --> Listening value = %s", text));
return Flowable.fromPublisher(repository.getCollection("product", Product.class)
.find(new Document("$text",
new Document("$search", text)
.append("$caseSensitive", false)
.append("$diacriticSensitive", false)
)));
}
我想知道上面的流程是否是使用kafka执行REST API CRUD操作的正确方法?我不认为消费者需要从数据库中提取数据,然后转发到http客户端,这时您可以直接返回数据库结果(这只是一个单文档,对吧?)。对于CUD事件,将所有这些事件放在一个生产者中是有意义的,但只能作为一种审计日志/数据库buffer@OneCricketeer我有一个微服务架构,所以如果其他微服务想要获得所有产品列表,我需要通过HTTP客户端调用,这在我的情况下不是一个更好的解决方案,因为我已经在使用KAFKA,所以为什么我要使用HTTP客户端Kafka并不是数据库客户端的替代品,而且你不能像你看起来想做的那样从Kafka获得一条记录。此外,您已经在调用
repository.getCollection
overHTTP@OneCricketeer即使对于CUD操作,UI也需要知道数据是否为CUD,我们不需要将kafka consumer的响应发送回制作人吗请看一下我的代码,我不认为消费者需要从数据库中提取,然后转发到http客户端,这时您可以直接返回数据库结果(这只是一个文档,对吧?)。对于CUD事件,将所有这些事件放在一个生产者中是有意义的,但只能作为一种审计日志/数据库buffer@OneCricketeer我有一个微服务架构,所以如果其他微服务想要获得所有产品列表,我需要通过HTTP客户端调用,这在我的情况下不是一个更好的解决方案,因为我已经在使用KAFKA,所以为什么我要使用HTTP客户端Kafka并不是数据库客户端的替代品,而且你不能像你看起来想做的那样从Kafka获得一条记录。此外,您已经在调用repository.getCollection
overHTTP@OneCricketeer即使对于CUD操作,用户界面也需要知道数据是否为CUD,我们不需要将卡夫卡消费者的响应发送回制作人吗请查看我的代码并
@KafkaClient
public interface IProductProducer {
@Topic(ProductTopicConstants.GET_FREE_TEXT_SEARCH)
Flowable<Product> findFreeText(String text);
}
@Override
public Flowable<ProductViewModel> findFreeText(String text) {
LOG.info("Manager --> Finding all the products");
List<ProductViewModel> model = new ArrayList<>();
iProductProducer.findFreeText(text).subscribe(item -> {
System.out.println(item);
}, error ->{
System.out.println(error);
});
return Flowable.just(new ProductViewModel());
}
@Topic("reactive-products")
public Single<Product> receive(
@KafkaKey String brand,
Single<Product> productFlowable) {
return productFlowable.doOnSuccess((product) ->
System.out.println("Got Product - " + product.getName() + " by " + brand)
);
}
iProductProducer.findFreeText(text).subscribe(item -> {
System.out.println(item);
}, error ->{
System.out.println(error);
});