当前位置: 首页>>代码示例>>Java>>正文


Java Message.getId方法代码示例

本文整理汇总了Java中com.alibaba.otter.canal.protocol.Message.getId方法的典型用法代码示例。如果您正苦于以下问题:Java Message.getId方法的具体用法?Java Message.getId怎么用?Java Message.getId使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.alibaba.otter.canal.protocol.Message的用法示例。


在下文中一共展示了Message.getId方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: main

import com.alibaba.otter.canal.protocol.Message; //导入方法依赖的package包/类
public static void main(String[] args) throws InterruptedException {

        CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("127.0.0.1", 11111),
                "totoro",
                "",
                "");

        connector.connect();
        connector.subscribe();
        int emptyTimes = 0;

        while (running) {
            Message message = connector.getWithoutAck(5 * 1024);

            if (message == null || message.getId() == -1L) {
                applyWait(emptyTimes++);
            } else {
                //logger.info(message.toString());
                long messageId = message.getId();
                System.out.println("消息id:" + messageId);
                Thread.sleep(1000);

                connector.rollback();
            }


        }

    }
 
开发者ID:zhongchengxcr,项目名称:canal-elasticsearch,代码行数:30,代码来源:LockTest.java

示例2: process

import com.alibaba.otter.canal.protocol.Message; //导入方法依赖的package包/类
protected void process() {
    int batchSize = 5 * 1024;
    while (running) {
        try {
            MDC.put("destination", destination);
            connector.connect();
            connector.subscribe();
            while (running) {
                Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据
                long batchId = message.getId();
                int size = message.getEntries().size();
                if (batchId == -1 || size == 0) {
                    // try {
                    // Thread.sleep(1000);
                    // } catch (InterruptedException e) {
                    // }
                } else {
                    printSummary(message, batchId, size);
                    printEntry(message.getEntries());
                }

                connector.ack(batchId); // 提交确认
                // connector.rollback(batchId); // 处理失败, 回滚数据
            }
        } catch (Exception e) {
            logger.error("process error!", e);
        } finally {
            connector.disconnect();
            MDC.remove("destination");
        }
    }
}
 
开发者ID:alibaba,项目名称:canal,代码行数:33,代码来源:AbstractCanalClientTest.java

示例3: fetchRows

import com.alibaba.otter.canal.protocol.Message; //导入方法依赖的package包/类
public Message fetchRows(int batchSize) {

        Message message = this.canalConnector.getWithoutAck(batchSize);

        long batchId = message.getId();

        int size = message.getEntries().size();

        if (batchId == -1 || size == 0) {

//            LOGGER.info("batch - {} 没有获取到数据", batchId);
            return null;

        } else {
            LOGGER.info("batch - {} data fetched successful, size is {}", batchId, size);
            return message;
        }

    }
 
开发者ID:lackhurt,项目名称:flume-canal-source,代码行数:20,代码来源:CanalClient.java

示例4: run

import com.alibaba.otter.canal.protocol.Message; //导入方法依赖的package包/类
@Override
public void run() {
    running = true;

    totoroSelector.start();
    totoroSelector.rollback();

    logger.info("Selector task start .......");
    Message message;
    rollBack.set(true);
    while (running) {
        try {
            //出现回滚立即停止
            message = totoroSelector.selector();


            /**
             * 当前处理回滚的调度模型,可以保证在消费端出错的时候、正确处理回滚,并正确应答和继续消费数据。
             *
             * 当发生回滚时,首先 consumer task 会将 rollback 设置为true ,自己停止工作,等待唤醒
             * 然后 trans task 也会同样挂起
             * channel会拒绝接受 message 和 future ,对于已经提交的 future 会尝试取消
             *
             * 到此 除了 selector task 以外  的所有线程 全部尽最大努力去停止处理消息,但注意此时还没有回滚
             *
             * 因为 selector 是循环获取数据,每次循环都会判断 rollback 状态,一旦发现rollback状态,跳出循环
             * 返回到 selector task里面 ,task会感知到回滚状态 ,清空渠道中的消息 ,并回滚 至最后一个未应答的
             * 消费点,然后丢弃本条消息,重新获取一次消息(回滚的消息)
             * 当上面所有工作 都做完了,便完成了回滚 ,selector task 改变回滚状态,重新正常工作
             *
             * 粗略测试结果 : 40000条数据,单机测试,当 batchId 能被2整除的时候回滚
             *  在不真正消费数据的前提下(消费端直接应答),处理性能非常好
             *
             */
            if (rollBack.state() == false) {
                totoroSelector.rollback();
                logger.info("The rollback happened =============>  discard message , batchId :{}", message.getId());
                //丢弃刚才的消息
                message = totoroSelector.selector();
                channel.clearMessage();
                rollBack.set(true);
            }

            long batchId = message.getId();
            int size = message.getEntries().size();
            if (batchId == -1 || size == 0) {
                message = null;//help gc
            } else {
                logger.info("Put message into channel =====> batchId :{}", message.getId());

                if (logger.isDebugEnabled()) {
                    printSummary(message, batchId, size);
                    printEntry(message.getEntries());
                }
                //将消息放入管道
                channel.putMessage(message);
            }
        } catch (InterruptedException e) {
            logger.error("Selector task has been interrupted ", e);
            running = false;
            break;
        }
    }
}
 
开发者ID:zhongchengxcr,项目名称:canal-elasticsearch,代码行数:65,代码来源:SelectorTask.java

示例5: selector

import com.alibaba.otter.canal.protocol.Message; //导入方法依赖的package包/类
@Override
public Message selector() throws InterruptedException {
    if (!running) {
        throw new RuntimeException("CanalEmbedSelector has benn not start");
    }

    Message message = null;
    int emptyTimes = 0;

    if (batchTimeout < 0) {
        while (running) {
            message = connector.getWithoutAck(batchSize);

            if (message == null || message.getId() == -1L) {
                if (rollBack.state() == false) {
                    break;
                } else {
                    applyWait(emptyTimes++);
                }

            } else {
                break;
            }
        }
        if (!running) {
            throw new InterruptedException();
        }
    } else {

        while (running) {
            message = connector.getWithoutAck(batchSize, batchTimeout, TimeUnit.SECONDS);
            if (message == null || message.getId() == -1L) {
                continue;
            } else {
                break;
            }
        }
        if (!running) {
            throw new InterruptedException();
        }
    }

    return message;
}
 
开发者ID:zhongchengxcr,项目名称:canal-elasticsearch,代码行数:45,代码来源:CanalEmbedSelector.java


注:本文中的com.alibaba.otter.canal.protocol.Message.getId方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。