我正在与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。
答案 0 :(得分:0)
“生产者容器”的含义不清楚-没有这种东西。
要永久关闭class ApplicationRecord < ActiveRecord::Base
self.implicit_order_column = :created_at
end
上的Producer
呼叫reset()
。