如何为 DeadLetter Kafka 创建测试

Posted

技术标签:

【中文标题】如何为 DeadLetter Kafka 创建测试【英文标题】:How to create a test for DeadLetter Kafka 【发布时间】:2021-05-30 05:11:31 【问题描述】:

在我的小微服务中,我创建了一个 Producer Kafka,以这种方式在 DeadLetter 中发送带有错误的消息(JSON 格式的错误消息):

@Component
public class KafkaProducer 
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
    public void sendDeadLetter(String message) 
        kafkaTemplate.send("DeadLetter", message);
    

我想为项目的完整性创建一个 JUnitTest,但我不知道如何创建可能的 JSON 错误的可能性以创建测试。感谢大家提供任何可能的帮助和建议

【问题讨论】:

嗨 michalk,你能给我看一个在这种情况下简单的“发送”测试的示例结构吗?如果你能回答我的问题,那么我可以接受你的答案 github.com/ConsenSysMesh/kafka-deadletter/tree/master/src/test 嗨,阿兰,我看到了您的链接,但由于我的经验不足,我无法使测试适应上面的 deadLetter,您能否帮助我构建测试以查看正确接收的消息?如果您可以回答我作为答案而不是评论,我可以将您标记为正确答案 @aran 我只需要测试消息的正确接收 【参考方案1】:

创建与您的代码一致的 JUnitTest。我应该重新创建您向其传递扭曲或无效 JSON 的情况。在您的情况下,我会选择配置一个 MockConsumer 从中读取任何消息,即您的代码逻辑将被邀请到死信中。 为了有一个可用的测试结构,我推荐这样的东西:

@KafkaListener(topics = "yourTopic")
public void listen(String message) 
messages.add(message);

为了测试一个基本结构可以是

@Test
 public void testDeadLetter()

//Set up a mockConsumer
MockConsumer<String,String> yourMockConsumer = new MockConsumer<String,String>   (OffsetResetStrategy.EARLIEST);
yourMockConsumer.subscribe(Collections.singletonList("yourTopic"));

//Sending message on embedded Kafka broker
String error = "ERRORE";
kafkaTemplate.send("yourTopic", error);
//Reading the message may take a second
Thread.sleep(1000);
//Create an Assert that checks you that the message is equal to the error specified           above
 

希望对你有用!

【讨论】:

【参考方案2】:

您可以使用 testcontainers 创建 Kafka 主题并在此基础上编写测试。

分享一个如何使用测试容器的例子https://github.com/0001vrn/testcontainers-example

【讨论】:

以上是关于如何为 DeadLetter Kafka 创建测试的主要内容,如果未能解决你的问题,请参考以下文章

如何为包含 kafka、postgres 和 rest api docker 容器的应用程序编写 e2e 测试自动化

如何为 Kafka 生产者配置日志记录?

如何为 Kafka 2.2 实现 FlinkKafkaProducer 序列化程序

如何为kafka主题分配优先级

如何为 C++ 程序创建测试运行/计划? [关闭]

K6 负载测试 - 如何为整个测试运行创建顺序 ID