2.3 SpringKafka消费者
2.3 SpringKafka消费者
2.3.1 Kafka消息监听器MessageListener
之前已经介绍了通过kafka-topic-consumer.sh
和kafka-tool
工具来消费数据。下面介绍SpringKafka消费数据的方式——kafka消息监听器。
Kafka的消息监听一般可以分为:1.单条数据监听;2.批量数据监听。GenericMessageListener
是SpringKafka
的消息监听器接口,也是一个函数式接口,利用接口的onMessage
方法可以实现消费数据。
public interface GenericMessageListener<T> {
void onMessage(T data);
default void onMessage(T data, @Nullable Acknowledgment acknowledgment) {
throw new UnsupportedOperationException("Container should never call this");
}
default void onMessage(T data, Consumer<?, ?> consumer) {
throw new UnsupportedOperationException("Container should never call this");
}
default void onMessage(T data, @Nullable Acknowledgment acknowledgment, Consumer<?, ?> consumer) {
throw new UnsupportedOperationException("Container should never call this");
}
}
基于此接口可以实现单条数据消息监听器接口MessageListenen
、多条数据消息监听器接口BatchMessageListener
、带ACK机制的消息监听器AcknowledgingMessageListener
和BatchAcknowledgingMessageListener
#mermaid-svg-11qFALBGTxUu6O9B {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-11qFALBGTxUu6O9B .error-icon{fill:#552222;}#mermaid-svg-11qFALBGTxUu6O9B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-11qFALBGTxUu6O9B .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-11qFALBGTxUu6O9B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-11qFALBGTxUu6O9B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-11qFALBGTxUu6O9B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-11qFALBGTxUu6O9B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-11qFALBGTxUu6O9B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-11qFALBGTxUu6O9B .marker.cross{stroke:#333333;}#mermaid-svg-11qFALBGTxUu6O9B svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-11qFALBGTxUu6O9B .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-11qFALBGTxUu6O9B .cluster-label text{fill:#333;}#mermaid-svg-11qFALBGTxUu6O9B .cluster-label span{color:#333;}#mermaid-svg-11qFALBGTxUu6O9B .label text,#mermaid-svg-11qFALBGTxUu6O9B span{fill:#333;color:#333;}#mermaid-svg-11qFALBGTxUu6O9B .node rect,#mermaid-svg-11qFALBGTxUu6O9B .node circle,#mermaid-svg-11qFALBGTxUu6O9B .node ellipse,#mermaid-svg-11qFALBGTxUu6O9B .node polygon,#mermaid-svg-11qFALBGTxUu6O9B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-11qFALBGTxUu6O9B .node .label{text-align:center;}#mermaid-svg-11qFALBGTxUu6O9B .node.clickable{cursor:pointer;}#mermaid-svg-11qFALBGTxUu6O9B .arrowheadPath{fill:#333333;}#mermaid-svg-11qFALBGTxUu6O9B .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-11qFALBGTxUu6O9B .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-11qFALBGTxUu6O9B .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-11qFALBGTxUu6O9B .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-11qFALBGTxUu6O9B .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-11qFALBGTxUu6O9B .cluster text{fill:#333;}#mermaid-svg-11qFALBGTxUu6O9B .cluster span{color:#333;}#mermaid-svg-11qFALBGTxUu6O9B div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-11qFALBGTxUu6O9B :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
MessageListener
Gener