nsq本身是无序的,如果起多个consumer消费可能会顺序混乱。但实际工作中有这种场景,比如用户更新数据,需要保证两次更新的先后顺序。
因此想到了用队列实现,建100个队列起100个线程去处理,nsq的consumer只做最简单的操作,这里做的是拿到message,用user_id对100取模,放进相应的队列里,然后等到队列处理完成再手动提交避免重复消费.
# -*- coding: utf-8 -*-
import threading
import json
import Queue
import nsq
MESSAGE_QUEUE_LIST = []
THREAD_NUM = 100
class MiddlewareComsumer():
global MESSAGE_QUEUE_LIST
def __init__(self):
pass
def run(self):
nsq.Reader(message_handler=self.handler,
nsqd_tcp_addresses=['127.0.0.1:4210'],
topic='nsqtest', channel='test', lookupd_poll_interval=