如何在带有kafka扩展的春季集成中停止我的生产者容器/ API

时间:2019-05-27 04:11:47

标签: spring-integration kafka-producer-api spring-kafka spring-integration-dsl

我正在与kafka生产者API进行spring集成。当我收到一些MessageException或ProducerException时,我想停止我的Producer API。

在消费者中(正常的spring-kafka),我正在使用ConsumerAwareListenerErrorHandler轻松停止我的监听器。

我以同样的方式在SI中寻找一些处理程序来停止我的生产者容器。

创建了一个错误通道,并将我所有的异常都放入该通道,但是找不到停止我的容器的方法。尝试了SmartLifeCycle,但是没有运气。

在这里我的Bean将消息发布到Kafka主题

@Bean
public IntegrationFlow hanldeKafka() {
    return IntegrationFlows.from(sendToKafkaChannel)
            .handle(
                    kafkaMessageHandler(producerFactory, topicName),
                    e -> e.id("myProducer"))
            .get();
}


public KafkaProducerMessageHandlerTemplateSpec<String, String> kafkaMessageHandler(
        ProducerFactory<String, String> producer, String topic) {
    return Kafka
            .outboundChannelAdapter(producer)
            .sync(true)
            .headerMapper(kafkaHeaderMapper())
            .messageKey(m ->  {
                try {
                Message value = jsonObjectMapper.fromJson(m.getPayload(), Message.class);
                return value.getlId();
                } catch (Exception e) {
                    log.error(e.toString());
                    throw new MessagingException(m);
                }
            })
            //.partitionId(m -> 10)
            .topicExpression("headers[kafka_topic] ?: '" + topic + "'")
            .configureKafkaTemplate(t -> t.id("kafkaTemplate:" + topic));
}

任何人都可以建议如何添加一些处理程序/控制器以停止生产者容器/ API。

1 个答案:

答案 0 :(得分:0)

“生产者容器”的含义不清楚-没有这种东西。

要永久关闭class ApplicationRecord < ActiveRecord::Base self.implicit_order_column = :created_at end 上的Producer呼叫reset()