示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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))