com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.tplink.nbu.demo.basicspringboot.DelayConsume$1 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.tplink.smb.eventcenter.port.kafka.delay.DelayEvent["eventFuture"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:46) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:29) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4568) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3821) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.tplink.smb.eventcenter.api.util.JsonUtils.bean2Json(JsonUtils.java:62) ~[eventcenter.api-1.4.5002-test-SNAPSHOT.jar:1.4.5002-test-SNAPSHOT]
at com.tplink.smb.eventcenter.port.kafka.KafkaEventCenter.sendGenerically(KafkaEventCenter.java:825) [eventcenter.kafka-1.4.5002-test-SNAPSHOT.jar:1.4.5002-test-SNAPSHOT]
at com.tplink.smb.eventcenter.port.kafka.KafkaEventCenter.sendGenerically(KafkaEventCenter.java:770) [eventcenter.kafka-1.4.5002-test-SNAPSHOT.jar:1.4.5002-test-SNAPSHOT]
at com.tplink.smb.eventcenter.port.kafka.KafkaEventCenter.sendDelay(KafkaEventCenter.java:346) [eventcenter.kafka-1.4.5002-test-SNAPSHOT.jar:1.4.5002-test-SNAPSHOT]
at com.tplink.nbu.demo.basicspringboot.DelayConsume.run(DelayConsume.java:53) [classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:768) [spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:752) [spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) [spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) [spring-boot-2.7.8.jar:2.7.8]
at com.tplink.nbu.demo.basicspringboot.DelayConsume.main(DelayConsume.java:46) [classes/:na]
2025-10-14 10:33:13.914 WARN 27616 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : event is null, please send nonnull message
2025-10-14 10:33:13.950 INFO 27616 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0
2025-10-14 10:33:13.950 INFO 27616 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130
2025-10-14 10:33:13.950 INFO 27616 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760409193949
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0
2025-10-14 10:33:13.951 INFO 27616 --- [_consumer_group] c.t.s.e.p.k.c.GenericKafkaConsumerTask : start to consumer kafka topic: delay_topic_level_2
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760409193949
2025-10-14 10:33:13.951 INFO 27616 --- [_consumer_group] c.t.s.e.p.k.c.AbstractTaskService : KafkaConsumerTask is running! topic:delay_topic_level_2
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] c.t.s.e.p.k.consumer.KafkaConsumerTask : start to consumer kafka topic: vms_dlq_hello-topic
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] c.t.s.e.p.k.c.AbstractTaskService : KafkaConsumerTask is running! topic:vms_dlq_hello-topic
2025-10-14 10:33:13.951 INFO 27616 --- [_consumer_group] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Subscribed to topic(s): delay_topic_level_2
2025-10-14 10:33:13.951 INFO 27616 --- [llo-topic_delay] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Subscribed to topic(s): vms_dlq_hello-topic
2025-10-14 10:33:14.106 INFO 27616 --- [llo-topic_delay] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A
2025-10-14 10:33:14.106 INFO 27616 --- [_consumer_group] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A
2025-10-14 10:33:14.106 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Discovered group coordinator admin1-virtual-machine:9092 (id: 2147483647 rack: null)
2025-10-14 10:33:14.106 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Discovered group coordinator admin1-virtual-machine:9092 (id: 2147483647 rack: null)
2025-10-14 10:33:14.529 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] (Re-)joining group
2025-10-14 10:33:14.529 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] (Re-)joining group
2025-10-14 10:33:14.542 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] (Re-)joining group
2025-10-14 10:33:14.542 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] (Re-)joining group
2025-10-14 10:33:14.544 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Successfully joined group with generation Generation{generationId=1, memberId='consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357-2e8c69d8-3a94-4c59-a012-08f1b57ea12b', protocol='cooperative-sticky'}
2025-10-14 10:33:14.544 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Successfully joined group with generation Generation{generationId=73, memberId='consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc-0a62b905-9bd4-4718-9dda-6580e630d9d9', protocol='cooperative-sticky'}
2025-10-14 10:33:14.545 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Finished assignment for group at generation 1: {consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357-2e8c69d8-3a94-4c59-a012-08f1b57ea12b=Assignment(partitions=[delay_topic_level_2-0])}
2025-10-14 10:33:14.545 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Finished assignment for group at generation 73: {consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc-0a62b905-9bd4-4718-9dda-6580e630d9d9=Assignment(partitions=[vms_dlq_hello-topic-0])}
2025-10-14 10:33:14.548 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Successfully synced group in generation Generation{generationId=73, memberId='consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc-0a62b905-9bd4-4718-9dda-6580e630d9d9', protocol='cooperative-sticky'}
2025-10-14 10:33:14.548 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Updating assignment with
Assigned partitions: [vms_dlq_hello-topic-0]
Current owned partitions: []
Added partitions (assigned - owned): [vms_dlq_hello-topic-0]
Revoked partitions (owned - assigned): []
2025-10-14 10:33:14.548 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Notifying assignor about the new Assignment(partitions=[vms_dlq_hello-topic-0])
2025-10-14 10:33:14.549 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Adding newly assigned partitions: vms_dlq_hello-topic-0
2025-10-14 10:33:14.549 INFO 27616 --- [llo-topic_delay] com.tplink.smb.eventcenter.api.Handler : ending rebalance!
2025-10-14 10:33:14.551 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Found no committed offset for partition vms_dlq_hello-topic-0
2025-10-14 10:33:14.553 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Found no committed offset for partition vms_dlq_hello-topic-0
2025-10-14 10:33:14.564 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Successfully synced group in generation Generation{generationId=1, memberId='consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357-2e8c69d8-3a94-4c59-a012-08f1b57ea12b', protocol='cooperative-sticky'}
2025-10-14 10:33:14.565 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Updating assignment with
Assigned partitions: [delay_topic_level_2-0]
Current owned partitions: []
Added partitions (assigned - owned): [delay_topic_level_2-0]
Revoked partitions (owned - assigned): []
2025-10-14 10:33:14.565 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Notifying assignor about the new Assignment(partitions=[delay_topic_level_2-0])
2025-10-14 10:33:14.565 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Adding newly assigned partitions: delay_topic_level_2-0
2025-10-14 10:33:14.565 INFO 27616 --- [_consumer_group] com.tplink.smb.eventcenter.api.Handler : ending rebalance!
2025-10-14 10:33:14.566 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Found no committed offset for partition delay_topic_level_2-0
2025-10-14 10:33:14.566 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Found no committed offset for partition delay_topic_level_2-0
2025-10-14 10:33:14.574 INFO 27616 --- [_consumer_group] o.a.k.c.c.internals.SubscriptionState : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Resetting offset for partition delay_topic_level_2-0 to position FetchPosition{offset=344, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[admin1-virtual-machine:9092 (id: 0 rack: null)], epoch=absent}}.
2025-10-14 10:33:14.574 INFO 27616 --- [llo-topic_delay] o.a.k.c.c.internals.SubscriptionState : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Resetting offset for partition vms_dlq_hello-topic-0 to position FetchPosition{offset=0, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[admin1-virtual-machine:9092 (id: 0 rack: null)], epoch=absent}}.
2025-10-14 10:33:14.575 INFO 27616 --- [_consumer_group] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_c4db0115-18e7-456f-b4d5-740d02400357, groupId=delay_consumer_group] Seeking to offset 344 for partition delay_topic_level_2-0
2025-10-14 10:33:14.576 INFO 27616 --- [llo-topic_delay] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_aef0f87e-328a-4228-b205-2c2452e3a9fc, groupId=delay] Seeking to offset 0 for partition vms_dlq_hello-topic-0 public void registerDelayConsumer(String delayTopic, ExecutorService executorService) {
String delayGroupId = "delay_consumer_group";
// 构造延迟处理器时,注入已有scheduledExecutorService
DelayHandler delayHandler = new DelayHandler(this, scheduledExecutorService);
// 调用原始注册逻辑,注册延迟主题的消费者
registerUnicastGenerically(
delayTopic, // 监听的延迟主题(支持通配或具体前缀)
delayGroupId, // 延迟消费者固定组ID
delayHandler,
executorService,
DelayEvent.class// 使用延迟处理器
);
}public void sendDelay(@Nonnull String topic, String key, Integer partition, @Nonnull Event event, long delayMs,
@Nonnull DelayQueueStrategy strategy, EventFuture eventFuture) {
int level = strategy.getTargetDelayLevel(delayMs);
String delayTopic = String.format("delay_topic_level_%d", level);
event.setTimeStamp(System.currentTimeMillis());
long expirationTime = event.getTimeStamp() + FIXED_DELAY_LEVELS.get(level);
DelayEvent delayEvent = new DelayEvent(topic,key,partition,event,eventFuture,expirationTime);
sendGenerically(delayTopic,delayEvent);
}@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
@ComponentScan(basePackages = {
"com.tplink.nbu.demo.basicspringboot",
"com.tplink.smb.eventcenter.port.kafka.deadletter",
"com.tplink.smb.eventcenter.api.config"
})
public class DelayConsume implements CommandLineRunner {
@Autowired
private KafkaEventCenter eventCenter;
@Autowired
private DLQConfig deadLetterConfig;
private static final String EVENT_TOPIC = "delay_topic_level_2";
public static void main(String[] args) {
SpringApplication.run(DelayConsume.class, args);
}
@Override
public void run(String... args) throws Exception {
registerDelayConsumer();
registerEventConsumer();
eventCenter.sendDelay("vms_dlq_hello-topic", "key1", 0, new Event("key1", "延迟触发消息"), 2000,
new ForceMatchStrategy(), new EventFuture() {
@Override
public void onSuccess(EventCenterSendResult eventCenterSendResult) {
}
@Override
public void onFailure(Throwable throwable) {
}
});
}
private void registerDelayConsumer() {
eventCenter.registerDelayConsumer(EVENT_TOPIC, Executors.newSingleThreadExecutor());
}
private void registerEventConsumer() {
EventHandler eventHandler = event -> {
// 打印消息内容和消费时间戳,明确消费时机
log.info("[消费时间:{}] 触发消费,消息内容:{}",
LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
event.getMessage());
};
eventCenter.registerUnicast(
"vms_dlq_hello-topic",
"delay",
eventHandler,
Executors.newSingleThreadExecutor()
);
}
}
请分析并解决
最新发布