import json import logging import os import time from django_redis import get_redis_connection from django.conf import settings from threading import Thread from yzk_wechat_event.settings.constant import Constant from django.utils.module_loading import import_string logger = logging.getLogger('apps') class JQREventCallbackPubSub: rc = get_redis_connection('pubsub') @classmethod def publish(cls, data): cls.rc.lpush(Constant.JQR_EVENT_CALLBACK_PUBSUB_CHANNEL, json.dumps(data)) @classmethod def event_callback_listener(cls): while True: data = cls.rc.brpop(Constant.JQR_EVENT_CALLBACK_PUBSUB_CHANNEL, 5) if data is None: time.sleep(5) continue data = json.loads(data[1]) callback_data = json.loads(data['data']) corpinfo = data['corpinfo'] handler = data['handler'] handler = import_string(handler) handler(callback_data, corpinfo) class JQREventNewUserCallbackPubSub: rc = get_redis_connection('pubsub') @classmethod def publish(cls, data): cls.rc.lpush(Constant.JQR_EVENT_NEW_USER_CALLBACK_PUBSUB_CHANNEL, json.dumps(data)) @classmethod def event_callback_listener(cls): logger.info('event new user callback listener start') while True: data = cls.rc.brpop(Constant.JQR_EVENT_NEW_USER_CALLBACK_PUBSUB_CHANNEL, 5) if data is None: time.sleep(5) continue data = json.loads(data[1]) logger.info(f'new user event callback: {data}') callback_data = json.loads(data['data']) corpinfo = data['corpinfo'] handler = data['handler'] handler = import_string(handler) handler(callback_data, corpinfo) class JQRQrcodeCallbackPubSub: rc = get_redis_connection('pubsub') @classmethod def publish(cls, data): cls.rc.lpush(Constant.JQR_QRCODE_PUBSUB_CHANNEL, json.dumps(data)) @classmethod def qrcode_callback_listener(cls): while True: data = cls.rc.brpop(Constant.JQR_QRCODE_PUBSUB_CHANNEL, 5) if data is None: time.sleep(5) continue data = json.loads(data[1]) logger.info(f'qrcode event callback: {data}') qrcodeid = data['qrcodeid'] userid = data['userid'] externaluserid = data['externaluserid'] corpinfo = data['corpinfo'] handler = data['handler'] handler = import_string(handler) handler(qrcodeid, userid, externaluserid, corpinfo) # if not settings.DEBUG: # t = Thread(target=JQREventNewUserCallbackPubSub.event_callback_listener) # t.start() # t2 = Thread(target=JQRQrcodeCallbackPubSub.qrcode_callback_listener) # t2.start()