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监听类的更多相关文章

  1. kafka监听出现的问题,解决和剖析

    问题如下: kafka为什么监听不到数据 kafka为什么会有重复数据发送 kafka数据重复如何解决 为什么kafka会出现俩个消费端都可以消费问题 kafka监听配置文件 一. 解决问题一(kaf ...

  2. spring 整合kafka监听消费

    前言 最近项目里有个需求,要消费kafka里的数据.之前也手动写过代码去消费kafka数据.但是转念一想.既然spring提供了消费kafka的方法.就没必要再去重复造轮子.于是尝试使用spring的 ...

  3. [Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  4. Android手势监听类GestureDetector的使用

    在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...

  5. Ogre 监听类与渲染流程

    Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护, ...

  6. 基于Java+Selenium的WebUI自动化测试框架(四)-----设置监听类

    基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来 ...

  7. Session监听类HttpSessionListener介绍及在listener里取得request

    Session监听类HttpSessionListener介绍及在listener里取得request servlet-api.jar中提供了监听类HttpSessionListener,主要方法有两 ...

  8. Ambari 不能配置 Kafka 监听host的问题

    问题:Ambari下Kafka多IP监听配置 环境:Ambari 1.7.0 , Hadoop 2.2 Kafka 0.8.1.2.2.0.0 现象: Ambari 中是不能配置Kafka的host. ...

  9. java中的四种监听类用法

    在此列举四种方法: 自身类实现ActionListener接口,作为事件监听器 通过匿名类处理 通过内部类处理 通过外部类处理 下面依次介绍: 第一种:自身类实现ActionListener接口,作为 ...

随机推荐

  1. OC 成员变量 ( -> 使用 )

    @interface Student : NSObject { // @public // @protected // @private // 默认的作用域是@protected int age; @ ...

  2. (转)写的非常好的一篇HTTP协议详解

    原文地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html#3931004(推荐看原文,因为原文文章末有更详细链接) 当今 ...

  3. Android(java)学习笔记30:泛型接口的概述和使用

    1. 泛型接口的概述和使用: package cn.itcast_06; /* * 泛型接口:把泛型定义在接口上 */ public interface Inter<T> { public ...

  4. Python的免费在线学习课程

    网上资源不是本人的,所以,只是转发.其它的不负责 http://www.imooc.com/learn/177

  5. ART_20190430

    Algorithm-算法题 第一个只出现一次的字符 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要 ...

  6. 去除a标签的下划线

    a:link ,a:visited,a:hover,a:active { text-decoration: none;}

  7. EF Ccore 主从配置 最简化

    业务需要 配置一主多从数据库 读写分离  orm用的ef core , 把思路和代码写下 1. 配置2个数据库上下文 ETMasterContext  ETSlaveContext(把增删改功能禁用掉 ...

  8. 【luogu P3808 AC自动机(简单版)】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3808 #include <queue> #include <cstdio> #inc ...

  9. Git使用(一)

    声明: 第一次使用git,只能保证我的方法可以用,肯定不是最简最好的.以后需要用到更多的用法的时候再来这里更新. 说实话,记下来主要是因为自己记性不好,各种配置记不住,都是当备忘录用的,(囧囧囧囧囧) ...

  10. 使用fir.im和蒲公英进行测试的一些注意事项

    前言:使用fir.im和蒲公英进行测试的一些注意事项 最近公司的项目遇到了一个问题,有的用户的手机系统版本低于9.3高于9.0的存在崩溃的情况,8.x的系统的用户的有的界面的显示有问题(比如说图片严重 ...