librdkafka源码阅读:rd_kafka_q_serve和rd_kafka_q_pop_serve

rd_kafka_q_serve 可以说是Librdkafka库的灵魂,所以有必要单独撕一下源码。

1 这是一个阻塞方法。即获取op和callback是串行完成的。

2 所以该方法的参数包含要每次处理的最大数量。

主要逻辑代码:

rd_kafka_q_serve

-->如果有fwd_q(使用rd_kafka_q_fwd_get获取), 那么处理fwd_q的消息并返回。即优先处理fwd_q.

-->否则判断是否有op,如果没有,等待直到timeout.

-->如果有op,那么将max_cnt个op移动到本地队列localq.并释放锁。类似的移动到本地队列的操在库中多次出现。

--> rd_kafka_q_deq0弹出op,

-->rd_kafka_op_handle处理。

--->rd_kafka_op_handle_std标准op处理。这个函数写的挺乱的。多个if elseif , 不容易看出MECE。但是主要逻辑是无需处理的尽快返回。

---->如果是RD_KAFKA_OP_CB 类型,则调用rd_kafka_op_call 进行callback

       如果是RD_KAFKA_OP_RECV_BUF类型,则调用rd_kafka_buf_handle_op。

----->使用rko->rko_op_cb方法

--->callback特殊约定的callback

使用场景:

rk_kafka_thread_main

rd_kafka_poll

rd_kafka_queue_poll_callback

rd_kafka_q_pop_serve:

相比rd_kafka_q_serve,仅仅增加了等待timeout功能。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值