问题背景:
public class PushMessageListener {
@Autowired
RedisService redisService;
@Autowired
IChatGroupService chatGroupService;
@Autowired
IChatMsgService chatMsgService;
@Autowired
IConversationService conversationService;
@Autowired
MsgHelperScheduledTask msgHelperScheduledTask;
/**
* 最好能让kafka一个个顺序进行消费,避免带来并发问题
* (1)可以通过配置 max.poll.records 属性来控制每次拉取的消息数量。默认情况下,它是 500 条。如果你只想拉取一条消息,可以将其设置为 1。
* spring.kafka.consumer.properties.max.poll.records: 1
* 这样配置后,每次 poll() 方法调用将只拉取一条消息。
* 请注意,逐个拉取消息可能会导致较高的延迟,因此你需要权衡消费效率和实时性之间的需求。
* (2)
*
* @param consumerRecords
* @param ack
*/
@KafkaListener(
topics = "#{'${spring.kafka.consumer.topics}'.split(',')}",
groupId = "${spring.kafka.consumer.group-id}")
public void batchConsumer(List<ConsumerRecord<String, String>> consumerRecords, Acknowledgment ack) {
//保存到数据库,发送id冲突的地方
chatMsgService.save(chatMsg);
}
PushMessageListener 监听一个topic。当前后两个消息同时到来时候,保存到数据,会发送id冲突的问题。不是表现。目前原因尚不明