Spring Kafka 与嵌入式 Kafka 集成测试

2024-04-02

我有一个 Spring Boot 应用程序,它有一个消费者从一个集群中的主题消费并生成到不同集群中的另一个主题。

现在我正在尝试使用 Spring 嵌入式 Kafka 编写集成测试用例,但遇到了问题KafkaTemplate could not be registered. A bean with that name has already been defined in class path resource

消费级

@Service
public class KafkaConsumerService {

@Autowired
private KafkaProducerService kafkaProducerService;

@KafkaListener(topics = "${kafka.producer.topic}")
public void professor(List<Professor> pro) {
    pro.forEach(kafkaProducerService::produce);
    
   }

}

制作人班

@Service
public class KafkaProducerService {

@Value("${kafka.producer.topic}")
private String topic;

@Autowired
private KafkaTemplate<String, Object> kafkaTemplate;

public void produce(Professor pro) {
    kafkaTemplate.send(topic,"professor",pro);
  }

 }

在我的测试用例中我想覆盖KafkaTemplate这样当我打电话时kafkaConsumerService.professor中的方法Test它应该将数据生成到嵌入式 Kafka 中,我应该验证它。

测试配置

@TestConfiguration
@EmbeddedKafka(partitions = 1, controlledShutdown = false,
brokerProperties = {"listeners=PLAINTEXT://localhost:3333", "port=3333"})
public class KafkaProducerConfigTest {

@Autowired
 KafkaEmbedded kafkaEmbeded;

@Autowired
KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry;

@Before
public void setUp() throws Exception {
  for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry.getListenerContainers()) {
    ContainerTestUtils.waitForAssignment(messageListenerContainer, 
    kafkaEmbeded.getPartitionsPerTopic());
  }
}

@Bean
public ProducerFactory<String, Object> producerFactory() {
    return new DefaultKafkaProducerFactory<>(KafkaTestUtils.producerProps(kafkaEmbeded));
}

@Bean
public KafkaTemplate<String, Object> kafkaTemplate() {
    KafkaTemplate<String, Object> kafkaTemplate = new KafkaTemplate<>(producerFactory());
    return kafkaTemplate;
   }

 }

测试班

@EnableKafka
@SpringBootTest(classes = {KafkaProducerConfigTest.class})
@RunWith(SpringRunner.class)
public class KafkaProducerServiceTest {

@Autowired
private KafkaConsumerService kafkaConsumerService;

@Test
public void testReceive() throws Exception {
     kafkaConsumerService.professor(Arrays.asList(new Professor()));
     
     //How to check messages is sent to kafka?
}

 }

Error

 The bean 'kafkaTemplate', defined in com.kafka.configuration.KafkaProducerConfigTest, could not be registered. 
 A bean with that name has already been defined in class path resource [com/kafka/configuration/KafkaProducerConfig.class] and overriding is disabled.
 Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

有人可以帮助我如何验证发送到嵌入式 Kafka 服务器的消息吗?

Note我收到一些已弃用的警告

KafkaEmbedded 类型已弃用

KafkaEmbedded 类型的 getPartitionsPerTopic() 方法已弃用

KafkaTestUtils 类型中的方法 ProducerProps(KafkaEmbedded) 已弃用


启动2.1默认情况下禁用 bean 覆盖 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes#bean-overriding.

默认情况下禁用 Bean 覆盖,以防止 Bean 被意外覆盖。如果您依赖覆盖,则需要设置spring.main.allow-bean-definition-overriding to true.

关于弃用;请参阅 javadoc@EmbeddedKafka。它被替换为EmbeddedKafkaBroker.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Kafka 与嵌入式 Kafka 集成测试 的相关文章

随机推荐

  • 具有 http 身份验证的 Zend SOAP 服务器 WSDL URI

    我正在尝试使用 Zend Soap Server 设置 SOAP 服务 ZF1 我的问题是 WSDL URI 受密码保护 可以通过设置 https 用户名 来访问它 电子邮件受保护 cdn cgi l email protection 作为
  • 使 Python 单元测试因任何线程的异常而失败

    我正在使用单元测试框架来自动化多线程 python 代码 外部硬件和嵌入式 C 的集成测试 尽管我公然滥用单元测试框架进行集成测试 但它的效果非常好 除了一个问题 如果任何生成的线程引发异常 我需要测试失败 这可以通过单元测试框架实现吗 一
  • svn update 没有更新!

    我希望 svn update 用服务器上的文件覆盖我的本地文件 即使我的本地文件有修改 我也想扔掉它们并使用远程存储库上的版本 我怎么做 我试过svn update force但它不起作用 Update 感谢您的回答 所以我使用这样的恢复
  • 纯 Web 应用程序(HTML5 等)的推荐 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • actionbarsherlock 选项卡中的 Google 地图

    我正在尝试让谷歌地图 v2 在我的应用程序中工作 我见过几个示例 展示了如何在活动中打开 SupportMapFragment 这个想法是你的活动会调用setContentView R layout map layout 其中 map la
  • ggplot2 中的scale_colour_gradient 与scale_fill_gradient

    我绝对是初学者ggplot2并尝试使用这个包画出漂亮的人物 我正在阅读手册 但我不明白它们之间的区别scale colour gradient vs scale fill gradient 在我的分析中 我将使用 假设 进行观察 因为我不确
  • 使用 PHP 的 telegram API 发送图像总是失败

    我想制作一个使用 Telegram API 发送图像的函数 参考 API https github com mgp25 Telegram Bot API https github com mgp25 Telegram Bot API 但是当
  • PHP 闭包是否损坏或者我遗漏了什么?

    我一直在阅读 PHP 5 3 的新功能 主要功能之一是closures 除非我犯了严重错误 否则 PHP 开发人员要么是 a 将闭包与匿名函数混淆b 我正在测试的 PHP 5 3 1 中的闭包被破坏了 From 维基百科怎么说 http e
  • E/iardini.error0:无效 ID 0x00000001 - 错误资源 ID

    我目前遇到一个错误 该错误继续降低我的应用程序的性能 该错误不会导致应用程序关闭或崩溃 也不会导致向控制台写入异常 控制台仅报告此消息 E iardini error0 Invalid ID 0x00000001 该消息中唯一出现的内容是
  • 为什么我无法将派生泛型类型转换为基本非泛型类型(通过约束)?

    鉴于这个虚构的例子 class NonGeneric class Generic
  • 如何按原样生成数据库脚本?

    我这样做的主要原因是跟踪我的应用程序的数据库架构更改 在 SQL Server Management Studio 中 我能够生成一个创建脚本来创建数据库 但它不包含任何测试数据 理想情况下 当脚本运行时 它应该删除现有数据库 假设它已经存
  • 将多项回答问题制成表格

    想象一下 我有一个问题 有四个选项 受访者可以选择零个或四个选项的任意组合 变量被命名为A B C and D响应存储在 data frame 中 如下所示 set seed 1 dat data frame A sample c 0 1
  • Material-UI 面包屑导航与反应路由器集成

    我正在尝试将 Material UI 面包屑与反应路由器一起使用 我如何以编程方式检测当前路线 在 Material UI 网站上有一个关于如何使用它的示例 但它需要使用静态 breadcrumbNameMap 我已经尝试使用 HOC wi
  • GCC-汇编错误:针对“.data”重定位 R_X86_64_32S

    情况 环境 Arch Linux x86 64 4 2 3 1 ARCH GCC 海湾合作委员会 海湾合作委员会 5 2 0 Command gcc Wall g o asm printf asm printf s Error usr bi
  • symfony2实体的slugify方法在哪里

    我有 slugify 方法 每次更改实体类的标题属性时都会对其进行 slugify 处理 所以我把这个方法放在实体类中并像这样调用它 public function setTitle t this gt title t this gt sl
  • 如何在javascript中转换日期时间格式

    我如何转换日期时间5 8 2011 12 00 00 AM m d yyyy 到 dd MMM yyyy 类似08 May 2011在 JavaScript 中 这个链接是一个很好的资源 您可以使用 http blog stevenlevi
  • 在 Word.run 流程之外使用 Paragraph

    我试图首先找到一个段落 然后当用户单击按钮时 对该段落进行一些操作 我尝试使用似乎是权威书籍中的示例 Michael Zlatkovsky 的 Building Office Add Ins var global paragraph und
  • SimpleHTTPRequestHandler 在从 do_POST 方法返回之前关闭连接

    我正在用 python 编写一个简单的网络服务器 下面是我的代码的简化版本 class StreamerHandler SimpleHTTPRequestHandler def do POST self try length int sel
  • Html.EnumDropdownListFor:显示默认文本

    在我看来我有一个枚举下拉列表 http www asp net mvc overview releases mvc51 release notes Enum Asp Net MVC 5 1 中的新功能 Html EnumDropDownLi
  • Spring Kafka 与嵌入式 Kafka 集成测试

    我有一个 Spring Boot 应用程序 它有一个消费者从一个集群中的主题消费并生成到不同集群中的另一个主题 现在我正在尝试使用 Spring 嵌入式 Kafka 编写集成测试用例 但遇到了问题KafkaTemplate could no