我设计了一个springbootsrestapi添加和获取方法
@RestController("ProductV1Controller")
public class ProductController
{
private final IProductProducer _productProducer;
public ProductController(IProductProducer productProducer) {
_productProducer = productProducer;}
@PostMapping()
void AddProduct(@Valid @RequestBody ProductViewModel product) {
_productProducer.AddProduct(product);
}
@GetMapping()
List<ProductViewModel> Products() {
var test = _productProducer.GetProducts();
return _productProducer.GetProducts();
}
}
服务层
@Service
public class ProductProducer implements IProductProducer{
private final KafkaTemplate<String, Object> _template;
public ProductProducer(KafkaTemplate<String, Object> _template) {
this._template = _template;
}
@Override
public List<ProductViewModel> GetProducts() {
this._template.send(ProductTopicConstants.GET_PRODUCTS,null);
return List.of(new ProductViewModel("","",0,"")); --> Need to return the value from the kafka
}
@Override
public void AddProduct(ProductViewModel product) {
this._template.send(ProductTopicConstants.ADD_PRODUCT, product);
}
}
Kafka听众
@KafkaListener(id = ProductTopicConstants.GET_PRODUCTS, topics = ProductTopicConstants.GET_PRODUCTS)
public List<Product> GetProducts() {
return _productRepository.findAll();
}
在服务层 GetProducts()
我需要返回来自 _productRepository.findAll();
使用springkafka实现restapi的最佳方法是什么。
1条答案
按热度按时间wko9yo5t1#
你需要使用
ReplyingKafkaTemplate
将结果返回给rest控制器。请参阅回复kafkatemplate。
版本2.1.3引入了kafkatemplate的子类来提供请求/应答语义。这个类名为replyingkafkatemplate,并且有一个方法(除了超类中的方法之外)。
结果是一个listenablefuture,异步填充结果(或者超时时的异常)。结果还有一个sendfuture属性,它是调用kafkatemplate.send()的结果。您可以使用这个未来值来确定发送操作的结果。
文档中有一个示例。
编辑
编辑2
返回了一个对象列表。。。