kafka监听类
package com.datad.dream.service; import com.alibaba.fastjson.JSON; import com.datad.dream.dao.KafkaInfConfigDao; import com.datad.dream.entity.KafkaInfConfig; import com.datad.dream.entity.KafkaSendInfo; import com.datad.dream.entity.Message; import com.datad.dream.sysInit.service.ApplicationContextService; import com.datad.dream.utils.Global; import kafka.consumer.ConsumerConfig; import kafka.consumer.ConsumerIterator; import kafka.consumer.KafkaStream; import kafka.javaapi.consumer.ConsumerConnector; import kafka.serializer.StringDecoder; import kafka.utils.VerifiableProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; /** * Created by Administrator on 2017/10/25 0025. */ @Service public class KafkaConsumerService extends Thread { private static final Logger log = LoggerFactory.getLogger(KafkaConsumerService.class); private ConsumerConnector consumer; private KafkaInfConfig kafkaInfConfig; private KafkaInfConfigDao kafkaInfConfigDao; private KafkaSendInfoService kafkaSendInfoService; private KafkaNotificationService kafkaNotificationService; public KafkaConsumerService() { kafkaInfConfigDao = ApplicationContextService.getService().getBean("kafkaInfConfigDao"); kafkaSendInfoService = ApplicationContextService.getService().getBean("kafkaSendInfoService"); kafkaNotificationService = ApplicationContextService.getService().getBean("kafkaNotificationService"); kafkaInfConfig = kafkaInfConfigDao.getKafkaConfig(Global.getConfig("appId"), Global.getConfig("applicationNo")); log.info("初始化kafka监听配置:{}", kafkaInfConfig); } @Override public void run() { Properties props = new Properties(); props.put("zookeeper.connect", kafkaInfConfig.getZkAddress()); props.put("group.id", kafkaInfConfig.getGroupId()); props.put("zookeeper.session.timeout.ms", kafkaInfConfig.getTimeout()); props.put("zookeeper.sync.time.ms", kafkaInfConfig.getSyncTime()); props.put("auto.commit.interval.ms", kafkaInfConfig.getIntervalMs()); props.put("auto.offset.reset", kafkaInfConfig.getReset()); props.put("serializer.class", kafkaInfConfig.getSerializerClass()); ConsumerConfig config = new ConsumerConfig(props); consumer = kafka.consumer.Consumer.createJavaConsumerConnector(config); Map<String, Integer> topicCountMap = new HashMap<String, Integer>(); topicCountMap.put(kafkaInfConfig.getTopic(), new Integer(1)); StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties()); StringDecoder valueDecoder = new StringDecoder(new VerifiableProperties()); try { Map<String, List<KafkaStream<String, String>>> consumerMap = consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder); KafkaStream<String, String> stream = consumerMap.get(kafkaInfConfig.getTopic()).get(0); ConsumerIterator<String, String> it = stream.iterator(); while (it.hasNext()) { String messages = it.next().message(); log.info("kafka监听到的消息:{}", messages); KafkaSendInfo coupInfo = JSON.parseObject(messages, KafkaSendInfo.class); log.info("监听到的消息体为:{}", coupInfo); kafkaSendInfoService.updateReceive(coupInfo.getAddition()); Message message = new Message(); message.setAppId(coupInfo.getAppId()); message.setApplicationNo(coupInfo.getApplicationNo()); message.setHead(coupInfo.getHead()); message.setBody(coupInfo.getBody()); message.setFoot(coupInfo.getFoot()); message.setAddition(coupInfo.getAddition()); pushMessage(message); } } catch (Exception e) { log.error("监听出现异常:{}", e); } log.info("kafka监听完毕"); } public boolean startKafak() { KafkaConsumerService rtt = new KafkaConsumerService(); new Thread(rtt).start(); return true; } public boolean stopKafka() { KafkaConsumerService rtt = new KafkaConsumerService(); new Thread(rtt).stop(); return true; } public void pushMessage(Message message){ kafkaInfConfig = kafkaInfConfigDao.getKafkaConfig(message.getAppId(), message.getApplicationNo()); if("0".equals(kafkaInfConfig.getIsDrainage())){ kafkaNotificationService.pushMessage(message); }else{ log.info("消息已经被销毁:{}",message); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示