我有 Spring Boot
3.1.1
kotlin 应用程序,它使用 Spring Cloud 2022.0.4
来消费 Kafka 事件。
消费功能:
@Bean
fun ipConsumer(): Consumer<Message<PayloadWithEmbeddedHeaders<InstructionalPlanCreatedEvent>>> {
return Consumer {
if (it.headers[PublisherKafka.EVENT_TYPE_HEADER_NAME] == InstructionalPlanCreatedEvent::class.java.simpleName) {
process(ip = it.payload.body)
}
}
}
通用类型类:
data class PayloadWithEmbeddedHeaders<T>(val headers: Map<String, Any> = emptyMap(), val body: T)
活动类别:
data class InstructionalPlanCreatedEvent(
val id: UUID,
val organisationId: UUID,
val organisationName: String? = null,
val curriculumId: Long,
val curriculumName: String? = null,
val subjectId: Long,
val subjectName: String? = null,
val gradeId: Long,
val gradeName: String? = null,
val academicYearId: Long,
val academicYear: String? = null
)
在我的消费者函数中,当访问
it.payload.body
时,它会抛出 ClassCastException
,因为它以 LinkedHashMap
的形式出现。
此外,它并不是在活页夹测试中失败,而是在实际的 kafka 事件传入时失败。
这个问题已通过 this commit 解决。
您可以明确地将其添加为依赖项吗?
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-context</artifactId>
<version>4.0.6-SNAPSHOT</version>
</dependency>