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);
}
}
}
kafka监听类的更多相关文章
- kafka监听出现的问题,解决和剖析
问题如下: kafka为什么监听不到数据 kafka为什么会有重复数据发送 kafka数据重复如何解决 为什么kafka会出现俩个消费端都可以消费问题 kafka监听配置文件 一. 解决问题一(kaf ...
- spring 整合kafka监听消费
前言 最近项目里有个需求,要消费kafka里的数据.之前也手动写过代码去消费kafka数据.但是转念一想.既然spring提供了消费kafka的方法.就没必要再去重复造轮子.于是尝试使用spring的 ...
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- Android手势监听类GestureDetector的使用
在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...
- Ogre 监听类与渲染流程
Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护, ...
- 基于Java+Selenium的WebUI自动化测试框架(四)-----设置监听类
基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来 ...
- Session监听类HttpSessionListener介绍及在listener里取得request
Session监听类HttpSessionListener介绍及在listener里取得request servlet-api.jar中提供了监听类HttpSessionListener,主要方法有两 ...
- Ambari 不能配置 Kafka 监听host的问题
问题:Ambari下Kafka多IP监听配置 环境:Ambari 1.7.0 , Hadoop 2.2 Kafka 0.8.1.2.2.0.0 现象: Ambari 中是不能配置Kafka的host. ...
- java中的四种监听类用法
在此列举四种方法: 自身类实现ActionListener接口,作为事件监听器 通过匿名类处理 通过内部类处理 通过外部类处理 下面依次介绍: 第一种:自身类实现ActionListener接口,作为 ...
随机推荐
- mysqlbinlog用法总结
通过binlog日志统计dml语句,找出操作频繁的表 mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.0 ...
- hdu-4288 Coder---线段树+离线处理&离散化
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4288 题目大意: 维护一个有序数列{An},有三种操作: 1.添加一个元素. 2.删除一个元素. 3 ...
- 编程思想的理解(POP,OOP,SOA,AOP)
http://blog.csdn.net/hawksoft/article/details/7021435 1)POP--面向过程编程(Process-oriented programming ):面 ...
- BZOJ2730:[HNOI2012]矿场搭建(双连通分量)
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- Linux使用sz、rz命令下载、上传文件
1.安装服务 yum -y install lrzsz 2.上传命令:rz 使用rz命令,会调用系统的资源管理器,选择文件进行上传即可.上传的文件默认保存linux当前所在目录 3.下载命令:sz 根 ...
- Yii2获取当前程序执行的sql语句
1.Yii2获取当前程序执行的sql语句: $query = model::find(); $dataProvider = new ActiveDataProvider([ ...
- 【洛谷P4124】[CQOI2016]手机号码
手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...
- 【luogu P1726 上白泽慧音】 题解
题目链接:https://www.luogu.org/problemnew/show/P1726 菜 #include <stack> #include <cstdio> #i ...
- 学大伟业 Day 1 培训总结
第一天培训,讲的基本算法,东西很多.还有些数论,图论,数据结构and some small tricks 一.输入输出技巧 //输入输出技巧 /* scanf.printf:速度快,需要记忆不同数据类 ...
- HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1110 Equipment Box Time Limit: 2000/1000 MS (Java/Oth ...