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接口,作为 ...
随机推荐
- luogu P4168 [Violet]蒲公英
嘟嘟嘟 分块经典题竟然是一道黑题…… 分块求区间众数的大体思想是对于询问区间[L, R],预处理出这中间的整块的众数,然后统计两边零散的数在[L, R]中出现的次数,最后取出现次数最多且最小的数. 因 ...
- [USACO09FEB] Revamping Trails 【分层图+Dijkstra】
任意门:https://www.luogu.org/problemnew/show/P2939 Revamping Trails 题目描述 Farmer John dutifully checks o ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- caffe实现focal loss层的一些理解和对实现一个layer层易犯错的地方的总结
首先要在caffe.proto中的LayerParameter中增加一行optional FocalLossParameter focal_loss_param = 205;,然后再单独在caffe. ...
- 【洛谷P1272】 重建道路
重建道路 题目链接 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此, ...
- Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...
- papers-06-02
午睡被同事吵醒,只好干活.看到微信公众号有一篇文章说老朋友呢,点进去发现原来相关的工作好多,而且好新好细致. 微信的文章可以见这里: 探究最陌生的老朋友Softmax 里面的几篇文章可以看看. Lar ...
- android 界面控件 textview 全解
textview基本使用: <TextView 10. android:id="@+id/txtOne" 11. android:layout_width="200 ...
- jenkins 安装配置: centos-master windows/linux-slave + nginx代理 + node + job
centos install jenkins: 1.sudo vi /etc/yum.repos.d/jenkins.repo [jenkins] name=Jenkins baseurl=http: ...
- 原 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f8-bus/ 本文出自方志朋的博客 转载请标明出处: Spr ...