kafka333



MessageListener
import kafka.message.MessageAndMetadata;


public interface MessageListener {
    void onMessage(MessageAndMetadata<String, String> messageAndMetadata);
}

 

 

MessageConsumer

public class MessageConsumer implements Runnable {

    private static final Logger log = LoggerFactory.getLogger(MessageConsumer.class);


    @Value("${kafka.consumer.zookeeper.connect}")
    private String zookeeperConnect;

    @Value("${kafka.consumer.group.id}")
    private String groupId;

    @Value("${kafka.consumer.session.timeout.ms}")
    private String sessionMs;

    @Value("${kafka.consumer.auto.commit.interval.ms}")
    private String autoCommitMs;

    @Value("${kafka.consumer.zookeeper.sync.time.ms}")
    private String syncMs;

    @Value("${kafka.consumer.auto.offset.reset}")
    private String autoOffsetReset;

    @Value("${kafka.consumer.serializer.class}")
    private String serializerClass;

    @Value("${kafka.consumer.topic}")
    private String topic;

    @Value("${kafka.consumer.reconnect.num}")
    private int reconnectNum;// 重连次数

    @Value("${kafka.consumer.reconnect.time}")
    private long reconnectTime;// 多长时间重连一次单位是ms

    private ExecutorService executorService;

    public void setExecutorService(ExecutorService executorService) {
        this.executorService = executorService;
    }

    private ConsumerConnector consumerConnector;

    private Map<String, List<KafkaStream<String, String>>> streamsListMap;

    private MessageListener messageListener;


    public void setMessageListener(MessageListener messageListener) {
        this.messageListener = messageListener;
    }

    @Override
    public void run() {
        if (init()) {
            ArrayList<Runnable> taskList = new ArrayList<>();
            Collection<List<KafkaStream<String, String>>> streamsList = streamsListMap.values();
            Iterator<List<KafkaStream<String, String>>> slIterator = streamsList.iterator();
            while (slIterator.hasNext()) {
                List<KafkaStream<String, String>> streamList = slIterator.next();
                for (KafkaStream<String, String> stream : streamList) {
                    final ConsumerIterator<String, String> it = stream.iterator();
                    Runnable task = new Runnable() {
                        @Override
                        public void run() {
                            while (it.hasNext()) {
                                MessageAndMetadata<String, String> message = it.next();
                                messageListener.onMessage(message);
                            }
                        }
                    };
                    taskList.add(task);
                }
            }
            Iterator<Runnable> tasksIt = taskList.iterator();
            while (tasksIt.hasNext()) {
                executorService.execute(tasksIt.next());
            }
        }
    }

    private boolean init() {
        try {
            Properties props = new Properties();
            props.put("zookeeper.connect", zookeeperConnect);
            // group 代表一个消费组
            props.put("group.id", groupId);
            // zk连接超时
            props.put("zookeeper.session.timeout.ms", sessionMs);
            props.put("zookeeper.sync.time.ms", syncMs);
            props.put("auto.commit.interval.ms", autoCommitMs);
            props.put("auto.offset.reset", autoOffsetReset);
            // 序列化类
            props.put("serializer.class", serializerClass);
            props.put("kafka.reconnect.num", reconnectNum);
            props.put("kafka.reconnect.time", reconnectTime);
            ConsumerConfig consumerConfig = new ConsumerConfig(props);
            this.consumerConnector = Consumer.createJavaConsumerConnector(consumerConfig);
            StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties());
            StringDecoder valueDecoder = new StringDecoder(new VerifiableProperties());
            HashMap<String, Integer> map = new HashMap<String, Integer>();
            map.put(topic, 1);
            this.streamsListMap = consumerConnector.createMessageStreams(map, keyDecoder, valueDecoder);
        } catch (Exception e) {
            log.error("kafka连接创建失败",e);
            Assert.notNull(streamsListMap,"kafka连接创建失败");
            return false;
        }
        return true;
    }

    public void close() {
        if (this.consumerConnector != null) {
            this.consumerConnector.shutdown();
        }

        if (this.executorService != null) {
            this.executorService.shutdown();
        }
    }
}

 

 

MessageConsumerContainer
public class MessageConsumerContainer extends AbstractMessageListenerContainer {

    private MessageConsumer messageConsumer;

    /*public MessageConsumerContainer(ContainerProperties containerProperties, MessageConsumer messageConsumer) {
        super(containerProperties);
        this.messageConsumer = messageConsumer;
    }*/

    public MessageConsumerContainer(MessageConsumer messageConsumer) {
        this.messageConsumer = messageConsumer;
    }

    @Override
    protected void doStart() {
        if(isRunning()){return;}
        AsyncTaskExecutor executor = getTaskExecutor();
        if(executor == null){
            setTaskExecutor(new SimpleAsyncTaskExecutor());
        }
        setisRunning(true);
        getTaskExecutor().execute(this.messageConsumer);
    }

    @Override
    protected void doStop(Runnable callback) {
        if(isRunning()){
            messageConsumer.close();
            setisRunning(false);
        }
    }


}

 

 

 

AbstractMessageListenerContainer

public abstract class AbstractMessageListenerContainer implements SmartLifecycle {

    private final Object lifecycleMonitor = new Object();

    private boolean autoStartup = true;

    private volatile boolean isRunning = false;

    private int phase = 0;

    private AsyncTaskExecutor taskExecutor;

    //private final ContainerProperties containerProperties;

    /*public AbstractMessageListenerContainer(ContainerProperties containerProperties) {
        this.containerProperties = containerProperties;
    }*/

    public AsyncTaskExecutor getTaskExecutor() {
        return taskExecutor;
    }

    public void setTaskExecutor(AsyncTaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
    }

    @Override
    public boolean isAutoStartup() {
        return this.autoStartup;
    }

    @Override
    public final void start() {
        //LOGGER.info("start AbstractMessageListenerContainer", "Begin to start the AbstractMessageListenerContainer");
        synchronized (this.lifecycleMonitor) {
            doStart();
        }
    }

    @Override
    public void stop() {
        System.out.println("Begin to stop the AbstractMessageListenerContainer");
    }

    @Override
    public void stop(Runnable callback) {
        synchronized (this.lifecycleMonitor) {
            doStop(callback);
        }
    }

    protected abstract void doStart();

    protected abstract void doStop(Runnable callback);

    public void setAutoStartup(boolean autoStartup) {
        this.autoStartup = autoStartup;
    }

    @Override
    public boolean isRunning() {
        return isRunning;
    }

    public void setisRunning(boolean isRunning) {
        this.isRunning = isRunning;
    }

    @Override
    public int getPhase() {
        return phase;
    }

    public void setPhase(int phase) {
        this.phase = phase;
    }

    /*public ContainerProperties getContainerProperties() {
        return containerProperties;
    }*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值