下你所需,载你所想!
汇集开发技术源码资料

基于HPSocket写的NSQ消息队列消费者demo源码

:1.196MB :1 :2019-12-27 10:33:28

部分简介

总得说来,这里的理由是生产者发布一个topic时,请求nsqlookupd获取nsqd,有两种方式:
1、nsqlookupd从所有注册节点中选择一个节点,返回给生产者,但nsqlookupd没有此功能。
2、nsqlookupd返回所有节点,让生产者来选择,这样可以做到多机容灾。相比来说,比指定地址稍好点。
个人感觉,如果要生产者要做到比较完善的容灾,可以使用方式2来实现,同时也可以控制nsqd的负载均衡,但是量不大,直接用主备两个nsqd来容灾即可。

Channel标识一个队列,用来实现消费者之间的负载均衡。一个topic可以有多个channel,发布者的消息会被发送到每一个channel相当于是广播操作。对于channel中的消息,会任选一个连接的消费者来发送。

.判断循环首 (真) ' 考虑到粘包问题,所以一直循环去解析数据,直到解不出来未知
' 叠加数据
.如果真 (size - inlen < 8) ' 如果长度小于8,则不是标准的协议,跳出循环,去掉数据
跳出循环 ()
.如果真结束
' len = _HP_GetDword (data, inlen + #protocol_len) ' 前四个字节为数据长度,加上上一次的长度
len = _取字节集长度 (data, size, inlen)
.如果真 (len + 4 > size - inlen) ' 如果数据长度大小剩余长度,则数据不完整,跳出循环,去掉数据
跳出循环 ()
.如果真结束
' api = _HP_GetDword (data, inlen + #protocol_api) ' 第5到8字节为命令
api = _取字节集指令 (data, size, inlen)
buffsize = len - #protocol_api
.如果真 (buffsize > 0) ' 判断还有没有数据
pBuffer = 指针到字节集 (data + inlen + #protocol_data, len - #protocol_api) ' 取出数据
.如果真结束
inlen = inlen + len + 4 ' 移动游标
接收事件 (api, pBuffer)
.判断循环尾 ()

基于HPSocket写的NSQ消息队列消费者demo源码

热门推荐

相关文章