def keep_handle_msg(self, handle): """ handle arg is the pub published :param handle: lambda item: do_something :return: """ sub = self.subscribe() msgs = sub.listen() try: for msg in msgs: if msg["type"] != "message": continue try: item_json = msg['data'].decode() item = json.loads(item_json) with safe_db_connection(): handle(item) except Exception as e: logger.error('Subscribe handler handle msg error: ', e) except Exception as e: logger.error('Consume msg error: ', e) try: sub.close() except Exception as e: logger.error("Redis observer close error: ", e)
def watch_recv_new_site_msg(self): ws = self user_id = str(self.scope["user"].id) # 先发一个消息再说 with safe_db_connection(): self.send_unread_msg_count() def handle_new_site_msg_recv(msg): users = msg.get('users', []) logger.debug('New site msg recv, message users: {}'.format(users)) if user_id in users: ws.send_unread_msg_count() new_site_msg_chan.keep_handle_msg(handle_new_site_msg_recv)
def _handle_msg(self, _next, error, complete): """ handle arg is the pub published :param _next: next msg handler :param error: error msg handler :param complete: complete msg handler :return: """ msgs = self.sub.listen() if error is None: error = lambda m, i: None if complete is None: complete = lambda: None try: for msg in msgs: if msg["type"] != "message": continue item = None try: item_json = msg['data'].decode() item = json.loads(item_json) with safe_db_connection(): _next(item) except Exception as e: error(msg, item) logger.error( 'Subscribe handler handle msg error: {}'.format(e)) except Exception as e: logger.error('Consume msg error: {}'.format(e)) try: complete() except Exception as e: logger.error('Complete subscribe error: {}'.format(e)) pass try: self.unsubscribe() except Exception as e: logger.error("Redis observer close error: {}".format(e))