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. 通过describe命令学习Kubernetes的pod属性详解

    我们可以首先使用kubectl get pods命令得到pod列表,比如我们想研究pod nginx-storage-pod的明细: 使用命令kubectl describe pod nginx-st ...

  2. UVA11294 Wedding

    嘟嘟嘟 大佬们都说这是2-SAT入门题,然而对于刚学2_SAT的本菜鸡来说半天才理解…… 题面:新娘和新郎不能坐在同一侧,妻子和丈夫不能坐在同一侧,有**关系的两个人必须至少一个坐在新娘一侧,问方案. ...

  3. NYOJ298 点的变换 【矩阵乘法经典】

    任意门:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=298 点的变换 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 ...

  4. python+appuim 处理系统权限弹窗

    from appium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.w ...

  5. QBXT Day 2 记录

    例题1:乌龟棋 略 例题2: noip2015 子串 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出 ...

  6. SqlSugar操作Oracle的dblink时候@符号问题

    用的这个版本,作者忘记删除Oracle中的代码了....下个版本作者应该就会更新了,到时候就不会存在这个问题,这里记录一下. 引用nuget出现的问题: 使用dblink的时候,查询的时候需要带@符号 ...

  7. vim_preview_window

    *29.2*    The preview window When you edit code that contains a function call, you need to use the c ...

  8. 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: ...

  9. Linux CentOS7下安装Zookeeper-3.4.10服务(最新)

    Linux CentOS7下安装Zookeeper-3.4.10服务(最新) 2017年10月27日 01:25:26 极速-蜗牛 阅读数:1933   版权声明:本文为博主原创文章,未经博主允许不得 ...

  10. java 读取图片并转化为二进制字符串

    本例子的目的在于测试往oracle数据库中插入blob字段 //以下代码源于:https://www.cnblogs.com/ywlx/p/4544179.html public static Str ...