基本上,已打开登录用户 id = 123 的 WebSocket 会话,并且已创建并启动了侦听器容器,并记录了主题 notification.user中的记录。 123 发送到客户端,但从未真正调用acknowledgment.acknowledge();
。
最近查看的通知和相关的偏移量是已知的。我不想存储和管理该数据并寻求补偿。是时候关闭WebSocket会话并停止侦听器容器了,我需要确认一下。因此,它将作为消费者读取的最新偏移量存储在代理中的某个位置。新的WebSocket会话和侦听器容器自然会从该偏移量开始。
到目前为止,我已经尝试过https://docs.spring.io/spring-kafka/reference/html/#seek和
的即兴表演private class MyListener extends AbstractConsumerSeekAware implements AcknowledgingConsumerAwareMessageListener<String, Notification> {
我需要查看一些侦听器容器生命周期和atStop事件吗?
答案 0 :(得分:1)
如果由于某种原因必须使用手动确认,则由于您收到所有主题/分区/偏移量信息,因此可以通过捕获ConsumerStoppoingEvent
来在Consumer上提交偏移量。
建议的解决方案与
@KafkaListener
和@EventListener
完美配合,但是没有用于以编程方式创建和启动KafkaMessageListenerContainer的事件。
要在Spring不管理容器时将事件发送到事件侦听器,请调用setApplicationEventPublisher(applictionContext)
(当ApplicationEventListenerAware
bean由Spring管理时,应用程序发布者是应用程序上下文)。
或者您可以简单地注入自己的ApplicationEventPublisher
实现并在那里处理事件。