Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Spring integration Kafka spring集成在Kafka服务器关闭时如何处理_Spring Integration_Apache Kafka - Fatal编程技术网

Spring integration Kafka spring集成在Kafka服务器关闭时如何处理

Spring integration Kafka spring集成在Kafka服务器关闭时如何处理,spring-integration,apache-kafka,Spring Integration,Apache Kafka,我有一个web应用程序,它通过从请求中读取一些值来发送kafka消息。如果我的kafka服务器已关闭,如何发送错误状态。现在,在服务器关闭的情况下,prodcuer不断尝试连接并无限记录以下错误 错误: 14:56:10.181 [kafka-producer-network-thread | producer-1] WARN o.a.kafka.common.network.Selector - Error in I/O with localhost/127.0.0.1 java.net.C

我有一个web应用程序,它通过从请求中读取一些值来发送kafka消息。如果我的kafka服务器已关闭,如何发送错误状态。现在,在服务器关闭的情况下,prodcuer不断尝试连接并无限记录以下错误

错误:

14:56:10.181 [kafka-producer-network-thread | producer-1] WARN  o.a.kafka.common.network.Selector - Error in I/O with localhost/127.0.0.1
java.net.ConnectException: Connection refused
生产者配置为:

<int:channel id="inputToKafka">
    <int:queue/>
</int:channel>

<int-kafka:outbound-channel-adapter
        id="kafkaOutboundChannelAdapter"
        auto-startup="true"
        kafka-producer-context-ref="kafkaProducerContext"
        channel="inputToKafka"  >
    <int:poller fixed-delay="1000" time-unit="MILLISECONDS" receive-timeout="10" task-executor="taskExecutor"/>
</int-kafka:outbound-channel-adapter>

<task:executor id="taskExecutor" pool-size="5" keep-alive="120" queue-capacity="500"/>

<int-kafka:producer-context id="kafkaProducerContext">
    <int-kafka:producer-configurations>
        <int-kafka:producer-configuration broker-list="localhost:9092"
                                          key-class-type="java.lang.String"
                                          value-class-type="java.lang.String"
                                          sync="true"
                                          send-timeout="10"
                                          topic="test"
                                          key-encoder="kafkaEncoder"
                                          value-encoder="kafkaEncoder"
                                          compression-type="none"/>
    </int-kafka:producer-configurations>
</int-kafka:producer-context>
<bean id="kafkaEncoder" class="org.springframework.integration.kafka.serializer.common.StringEncoder">
</bean>
<bean id="valueEncoder" class="org.springframework.integration.kafka.serializer.avro.AvroReflectDatumBackedKafkaEncoder">
    <constructor-arg value="com.fastretailing.catalogPlatformSCMProducer.model.ProducerMessage" />
</bean>

我总是得到真实的状态。即使卡夫卡服务器关闭。并且上面的连接被拒绝错误持续显示。

inputOkafka
中删除轮询器和
元素

所有这些状态都表明消息已在通道ok中排队


将其设置为
DirectChannel
(通过删除队列)意味着适配器发送将在调用线程上运行。

非常感谢@Gary。。我会尝试这个,并很快更新。我像你说的那样尝试了。但当我关闭kafka服务器进行异常处理测试时,我的服务器会持续记录以下异常。我如何捕捉到这一点并给出错误响应?java.net.ConnectException:sun.nio.ch.SocketChannelImpl.checkConnect(本机方法)~[na:1.8.0_45]上的连接被拒绝,这是来自尝试重新连接的底层客户端-默认情况下,他每10毫秒进行一次-您可以增加它或更改
重新连接.backoff.ms
属性,或者,您可以增加该类出错的日志级别。另外,默认情况下,直到60秒后才会抛出异常;因此,为了减少延迟,我更改了程序并进行了测试,它按预期工作。有关这些属性的更多信息,请参阅。您好@BillGoldberg您是否能够在代码中检测到服务器故障?我也面临同样的问题。请让我知道您实施的解决方案。
 ProducerMessage k = list.get(0);
    boolean status = false;
    try {
        status = inputToKafka.send(
                MessageBuilder.withPayload(k.getJsonString(k))
                        .setHeader(KafkaHeaders.MESSAGE_KEY, k.getFeedName())  // Note: the header was `messageKey` in earlier versions
                        .setHeader(KafkaHeaders.TOPIC, "test")       // Note: the header was `topic` in earlier versions
                        .build()
        );
    } catch (Exception e) {
        System.out.println("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
        System.out.println(e);
    }
    System.out.println(status);
    if (!status){
        System.out.println("errrrrrrrrrrrrrrrrrrrrrrrr");
    }