Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 值在使用ConsumerRecord时不返回调用方法<&燃气轮机;在listner中 卡夫卡_Java_Spring_Spring Boot_Spring Kafka - Fatal编程技术网

Java 值在使用ConsumerRecord时不返回调用方法<&燃气轮机;在listner中 卡夫卡

Java 值在使用ConsumerRecord时不返回调用方法<&燃气轮机;在listner中 卡夫卡,java,spring,spring-boot,spring-kafka,Java,Spring,Spring Boot,Spring Kafka,这是一个已知的问题;我正在研究解决方案;请求/应答处理基于spring消息传递;当您使用原始消费者记录时,由于绕过了消息传递逻辑,因此回复处理不起作用 解决方法是将方法改为public Object UpdateProduct(Message Message) 标题包含在message.getHeaders()中,键位于标题KafkaHeaders.message\u键中 ProductViewModel是消息。getPayload()可能是因为kafka没有启动,或者端口错误。没有kafka正

这是一个已知的问题;我正在研究解决方案;请求/应答处理基于spring消息传递;当您使用原始
消费者记录时,由于绕过了消息传递逻辑,因此回复处理不起作用

解决方法是将方法改为
public Object UpdateProduct(Message Message)

标题包含在
message.getHeaders()
中,键位于标题
KafkaHeaders.message\u键中


ProductViewModel
消息。getPayload()

可能是因为kafka没有启动,或者端口错误。没有kafka正在运行,到kafka的连接正常。您可以将回复超时时间增加到其他时间吗没有增加超时时间,正如@Gary在回答中提到的那样
  @KafkaListener(id = ProductTopicConstants.UPDATE_PRODUCT, topics = ProductTopicConstants.UPDATE_PRODUCT,
            containerFactory = "addUpdateProductContainerFactory")
    @SendTo
    public Object UpdateProduct(ConsumerRecord<String, ProductViewModel> productViewModel) {
        String id = productViewModel.key();
        Product product = productRepository.findByid(id);
        if (product != null) {
            product.setName(productViewModel.name());
            product.setPrice(productViewModel.price());
            product.setDescription(productViewModel.description());
            return productRepository.save(product);
        }
        return KafkaNull.INSTANCE;
    }
   public GenericResponse<ProductViewModel> Update(ProductViewModel product, String id) throws InterruptedException, ExecutionException, TimeoutException {
        RequestReplyFuture<String, Object, Object> future =
                this._replyTemplate.sendAndReceive(new ProducerRecord<>(ProductTopicConstants.UPDATE_PRODUCT,0, id,product));
        LOG.info(future.getSendFuture().get(kafkaConstants.kafkaTimeout, TimeUnit.SECONDS).getRecordMetadata().toString());
        Object productDb = future.get(kafkaConstants.kafkaTimeout, TimeUnit.SECONDS).value();
        if (productDb == null)
            return null;
        if (productDb == HttpStatus.CONFLICT)
            return new GenericResponse<ProductViewModel>(null, HttpStatus.CONFLICT);
        Product mappedProducts = mapper.convertValue(productDb, new TypeReference<Product>() {});
        return new GenericResponse<ProductViewModel>(new ProductViewModel(mappedProducts.getId(), mappedProducts.getName(), mappedProducts.getPrice(), mappedProducts.getDescription(), mappedProducts.getVersion()), null);

    }
   @Bean
    public ConsumerFactory<String, ProductViewModel> consumerFactoryAddUpdateProduct() {
        return new DefaultKafkaConsumerFactory<>(consumerConfigs(),
                new StringDeserializer(),
                new JsonDeserializer<>(ProductViewModel.class));
    }

    @Bean
    public KafkaListenerContainerFactory<?> addUpdateProductContainerFactory(ProducerFactory<String, Object> pf) {
        ConcurrentKafkaListenerContainerFactory<String, ProductViewModel> factory =
                new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactoryAddUpdateProduct());
        factory.setReplyTemplate(kafkaTemplate(pf));
        return factory;
    }
org.springframework.kafka.requestreply.KafkaReplyTimeoutException: Reply timed out
    at org.springframework.kafka.requestreply.ReplyingKafkaTemplate.lambda$scheduleTimeout$3(ReplyingKafkaTemplate.java:339) ~[spring-kafka-2.5.2.RELEASE.jar:2.5.2.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
    at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]