37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
|
import json
|
||
|
|
||
|
from redis import StrictRedis
|
||
|
from django.conf import settings
|
||
|
from threading import Thread
|
||
|
|
||
|
from apps.msg.models import TbMessage
|
||
|
from yzk_wechat_event.settings.constant import Constant
|
||
|
|
||
|
|
||
|
class JQRMSGPubSubUtils:
|
||
|
rc = StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0)
|
||
|
msg_list = []
|
||
|
BATCH_SIZE = 10
|
||
|
|
||
|
@classmethod
|
||
|
def publish(cls, data):
|
||
|
cls.rc.publish(Constant.JQR_MSG_PUBSUB_CHANNEL, json.dumps(data))
|
||
|
|
||
|
|
||
|
def listen():
|
||
|
pubsub = JQRMSGPubSubUtils.rc.pubsub()
|
||
|
pubsub.subscribe(Constant.JQR_MSG_PUBSUB_CHANNEL)
|
||
|
for msg in pubsub.listen():
|
||
|
print(msg)
|
||
|
if msg['type'] == 'message':
|
||
|
data = msg.get('data')
|
||
|
data = json.dumps(str(data))
|
||
|
JQRMSGPubSubUtils.msg_list.append(data)
|
||
|
if len(JQRMSGPubSubUtils.msg_list) >= JQRMSGPubSubUtils.BATCH_SIZE:
|
||
|
TbMessage.objects.bulk_create(JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:])
|
||
|
JQRMSGPubSubUtils.msg_list = JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:]
|
||
|
|
||
|
|
||
|
# t = Thread(target=listen)
|
||
|
# t.start()
|