Dynamically Creating Containers

有多种技术可用于在运行时创建侦听器容器。本部分探讨其中一些技术。

MessageListener Implementations

如果您直接实现自己的侦听器,则可以使用容器工厂简单地为该侦听器创建一个原始容器:

User Listener
  • Java

  • Kotlin

link:{java-examples}/dynamic/MyListener.java[role=include]
link:{java-examples}/dynamic/Application.java[role=include]
link:{kotlin-examples}/dynamic/Application.kt[role=include]
link:{kotlin-examples}/dynamic/Application.kt[role=include]

Prototype Beans

可以使用 @KafkaListener 注释的方法的容器可以通过将 bean 声明为 prototype 来动态创建:

Prototype
  • Java

  • Kotlin

link:{java-examples}/dynamic/MyPojo.java[role=include]
link:{java-examples}/dynamic/Application.java[role=include]
link:{java-examples}/dynamic/Application.java[role=include]
link:{kotlin-examples}/dynamic/Application.kt[role=include]
link:{kotlin-examples}/dynamic/Application.kt[role=include]
link:{kotlin-examples}/dynamic/Application.kt[role=include]

监听器必须具有唯一的 ID。从 2.8.9 版本开始,KafkaListenerEndpointRegistry 具有一个新方法 unregisterListenerContainer(String id),它允许您重复使用 id。注销容器不会注销 stop() 容器,您必须自己执行此操作。