package com.moral.api.kafka.consumer;
|
|
import com.alibaba.fastjson.JSON;
|
import com.moral.api.websocket.SingleDeviceServer;
|
import org.apache.kafka.clients.consumer.Consumer;
|
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
import org.apache.kafka.common.TopicPartition;
|
import org.springframework.kafka.annotation.KafkaListener;
|
import org.springframework.kafka.listener.ConsumerSeekAware;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Map;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
/**
|
* @ClassName SecondsDataConsumer1
|
* @Description TODO
|
* @Author 陈凯裕
|
* @Date 2021/6/15 14:49
|
* @Version TODO
|
**/
|
@Component
|
public class SecondDataConsumer implements ConsumerSeekAware {
|
|
@KafkaListener(topics = "second_data",groupId = "SecondsDataGroup3")
|
public void listen(ConsumerRecord<String, String> record , Consumer consumer) throws Exception {
|
String messageStr = record.value();
|
Map<String,String> message = (Map<String,String>)JSON.parse(messageStr);
|
System.out.println(message);
|
CopyOnWriteArraySet<SingleDeviceServer> sockets = SingleDeviceServer.sockets;
|
for (SingleDeviceServer socket : sockets) {
|
//判断消息书否数据该socket
|
socket.sendMessage(message.toString());
|
}
|
System.out.println(message);
|
}
|
|
@Override
|
public void registerSeekCallback(ConsumerSeekCallback consumerSeekCallback) {
|
|
}
|
|
//consumer回调函数,设置从最新的offset开始消费
|
@Override
|
public void onPartitionsAssigned(Map<TopicPartition, Long> map, ConsumerSeekCallback consumerSeekCallback) {
|
map.forEach((t, o) -> consumerSeekCallback.seekToEnd(t.topic(), t.partition()));
|
}
|
|
@Override
|
public void onIdleContainer(Map<TopicPartition, Long> map, ConsumerSeekCallback consumerSeekCallback) {
|
|
}
|
}
|