我正试图使用Spring-Kafka2.8.0和非阻塞重试功能为我的项目实现非阻塞重试。
我做了以下工作。autoCreateTopics属性是假的!
@KafkaListener(
id = "customListenerId",
idIsGroup = false,
topics = "main-topic-1, main-topic-2")
@RetryableTopic(
autoCreateTopics = "false",
fixedDelayTopicStrategy = FixedDelayStrategy.SINGLE_TOPIC,
backoff = @Backoff(delay = 10000),
attempts = "6",
kafkaTemplate = "kafkaTemplate",
include = {
AerospikeException.Timeout.class,
QueryTimeoutException.class,
HystrixRuntimeException.class})
public void consumePerTopic(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic,
@Payload byte[] payload,
Acknowledgment acknowledgment) {
processor.process(objectMapper.readValue(payload, CreateRequest.class));
acknowledgment.acknowledge();
}
我得到了下面的集成测试,它使用kafka作为嵌入式容器。测试模拟db连接问题-测试中的代码必须抛出在使用者中声明为可还原的AerospikeException.Timeout。
@Test
void shouldNotCreateEntityForTopicsWhenDbTimedOutAndProduceRetryMessages() {
performWithDbLatency(Duration.ofMillis(1000), () -> {
var createEntityIdempotencyKeys = entityKafkaSteps.sendCreateRequestToAllTopicsWithIdempotency(
getCreateEntityRequest("entity-owner-a"));
retryEntityKafkaSteps.consumeRetryCreateRequestsByIdempotencyKeys(createEntityIdempotencyKeys);
});
}
我对嵌入式kafka容器的配置如下
embedded:
kafka:
topicsToCreate: main-topic-1, main-topic-2
我理解卡夫卡的默认行为是允许自动主题的创建。这个测试正在成功地通过,但据我所知,autoCreateTopics属性应该阻止retry和dlt主题的创建,即使它在kafka ->中是允许的,并且测试必须失败,因为代理中没有retry和dlt主题。
请澄清这是一种预期的行为,还是我遗漏了什么?如果要通过RetryTopicConfiguration bean使用doNotAutoCreateRetryTopics()方法声明重试功能,则存在相同的行为。
非常感谢。
编辑的:我主要关心的是:
autoCreateTopics = "false"
为我的用户创建retry和dlt主题。allow.auto.create.topics = true
)我正在使用playtika测试容器库。
发布于 2021-12-08 13:48:16
没有autoCreateTopics = "false"
仅仅意味着框架将不会创建主题;它与代理是否被配置为创建它们无关。
@EmbeddedKafka(topics = ...)
将始终创建主题。
若要禁用嵌入式kafka broker中的主题创建,请使用
@EmbeddedKafka(brokerProperties = "auto.create.topics.enable:false")
不要在那里指定任何topics
。
也可以将使用者属性allow.auto.create.topics
设置为false
;它覆盖代理属性(如果为真)。
发布于 2021-12-08 20:44:34
@Gary非常感谢您的耐心--我终于理解了根本原因。主题不是由spring创建的,而是由连接到retry的使用者创建的,在我的测试-> broker中,dlt主题允许它这样做,->主题是自动创建的。
谢谢你的帮助!
https://stackoverflow.com/questions/70273184
复制相似问题