class RabbitMQ_Queue(object): def _start_new_connect(self): self.conn=Connection(self.Queue_Server,username=self.Queue_User,password=self.Queue_PassWord ,vhost=self.Queue_Path,port=self.Queue_Port, io_loop=tornado.ioloop.IOLoop.instance()) self.conn.on_disconnect=self.on_queue_disconnect self.conn.on_error=self.on_queue_error self.conn.connect(self.on_connect) def __init__(self,Queue_Server,Queue_User,Queue_PassWord,Queue_Path,BackQueueName,Queue_Port=None): self.Queue_Server=Queue_Server self.Queue_User=Queue_User self.Queue_PassWord=Queue_PassWord self.Queue_Path=Queue_Path self.Queue_Port=Queue_Port self.back_queue="WSBack-"+BackQueueName self._start_new_connect() def on_connect(self): if self.conn.status!=status.OPENED: print 'connect rabbitmq fail' self.conn.close(self.stop) else: print 'connect rabbitmq success' self.channel = self.conn.channel() self.channel.queue_declare('task', durable=True, callback=self.on_queue_creation) self.channel.queue_declare(self.back_queue,auto_delete=True,callback=self.on_queue_back_created,durable=False) def on_queue_creation(self,qinfo): print "queue %s created"%qinfo.queue self.task_queue=qinfo.queue def on_queue_back_created(self,qinfo): print "back queue %s created"%qinfo.queue self.back_queue=qinfo.queue consumer = Consumer(self.consume_callback) self.channel.consume(qinfo.queue, consumer, no_ack=True) def consume_callback(self,msg): connid=msg.headers.get("connid",None) if connid: conn=connection_list.get(connid,None) if conn: if int(msg.headers.get("close_connect",0)): connection_list.pop(conn.connid,'') conn.close() conn.on_close() return retbody=msg.body compressed=msg.headers.get('compression')=='application/x-gzip' if compressed and not conn.usezlib: retbody=zlib.decompress(retbody) elif not compressed and conn.usezlib: retbody=zlib.compress(retbody) conn.write_message(retbody,binary=conn.usezlib) conn.last_act_time=time.time() def on_queue_disconnect(self): time.sleep(5) self._start_new_connect() def on_queue_error(self,err): print str(err) time.sleep(5) self._start_new_connect() def publish(self,msg): self.channel.publish(msg,'',self.task_queue)
class RabbitMQ_Queue(object): def _start_new_connect(self): self.conn=Connection(self.Queue_Server,username=self.Queue_User,password=self.Queue_PassWord ,vhost=self.Queue_Path,port=self.Queue_Port, io_loop=tornado.ioloop.IOLoop.instance()) self.conn.on_disconnect=self.on_queue_disconnect self.conn.on_error=self.on_queue_error self.conn.connect(self.on_connect) def __init__(self,Queue_Server,Queue_User,Queue_PassWord,Queue_Path,BackQueueName,Queue_Port=None): self.Queue_Server=Queue_Server self.Queue_User=Queue_User self.Queue_PassWord=Queue_PassWord self.Queue_Path=Queue_Path self.Queue_Port=Queue_Port self._start_new_connect() def on_connect(self): if self.conn.status!=status.OPENED: print 'connect rabbitmq fail' self.conn.close(self.stop) else: print 'connect rabbitmq success' self.channel = self.conn.channel() self.channel.queue_declare(auto_delete=True,callback=self.on_queue_back_created,durable=False) def on_queue_back_created(self,qinfo): print "back queue %s created"%qinfo.queue self.back_queue=qinfo.queue self.channel.queue_bind(self.back_queue,"sys.sms",routing_key='sms.code',callback=self.on_queue_binded) consumer = Consumer(self.consume_callback) self.channel.consume(self.back_queue, consumer, no_ack=True) def on_queue_binded(self): print "queue binded" def consume_callback(self,msg): compressed=msg.headers.get('compression')=='application/x-gzip' if compressed: retbody=zlib.decompress(msg.body) else: retbody=msg.body global phone_pre js_data=json.loads(retbody) #if js_data['phone'][0:3] in phone_pre: if True: global connection_client if connection_client: connection_client.write_message(retbody) def on_queue_disconnect(self): time.sleep(5) self._start_new_connect() def on_queue_error(self,err): time.sleep(5) self._start_new_connect() def publish(self,msg): self.channel.publish(msg,'',self.task_queue)
class RabbitMQ_Queue(object): def _start_new_connect(self): self.conn = Connection(self.Queue_Server, username=self.Queue_User, password=self.Queue_PassWord, vhost=self.Queue_Path, port=self.Queue_Port, io_loop=tornado.ioloop.IOLoop.instance()) self.conn.on_disconnect = self.on_queue_disconnect self.conn.on_error = self.on_queue_error self.conn.connect(self.on_connect) def __init__(self, Queue_Server, Queue_User, Queue_PassWord, Queue_Path, BackQueueName, Queue_Port=None): self.Queue_Server = Queue_Server self.Queue_User = Queue_User self.Queue_PassWord = Queue_PassWord self.Queue_Path = Queue_Path self.Queue_Port = Queue_Port self.back_queue = "WSBack-" + BackQueueName self._start_new_connect() def on_connect(self): if self.conn.status != status.OPENED: print 'connect rabbitmq fail' self.conn.close(self.stop) else: print 'connect rabbitmq success' self.channel = self.conn.channel() self.channel.queue_declare('task', durable=True, callback=self.on_queue_creation) self.channel.queue_declare(self.back_queue, auto_delete=True, callback=self.on_queue_back_created, durable=False) def on_queue_creation(self, qinfo): print "queue %s created" % qinfo.queue self.task_queue = qinfo.queue def on_queue_back_created(self, qinfo): print "back queue %s created" % qinfo.queue self.back_queue = qinfo.queue consumer = Consumer(self.consume_callback) self.channel.consume(qinfo.queue, consumer, no_ack=True) def consume_callback(self, msg): connid = msg.headers.get("connid", None) if connid: conn = connection_list.get(connid, None) if conn: if int(msg.headers.get("close_connect", 0)): connection_list.pop(conn.connid, '') conn.close() conn.on_close() return retbody = msg.body compressed = msg.headers.get( 'compression') == 'application/x-gzip' if compressed and not conn.usezlib: retbody = zlib.decompress(retbody) elif not compressed and conn.usezlib: retbody = zlib.compress(retbody) conn.write_message(retbody, binary=conn.usezlib) conn.last_act_time = time.time() def on_queue_disconnect(self): time.sleep(5) self._start_new_connect() def on_queue_error(self, err): print str(err) time.sleep(5) self._start_new_connect() def publish(self, msg): self.channel.publish(msg, '', self.task_queue)
class RabbitMQ_Queue(object): def _start_new_connect(self): self.conn=Connection(self.Queue_Server,username=self.Queue_User,password=self.Queue_PassWord ,vhost=self.Queue_Path,port=self.Queue_Port, io_loop=tornado.ioloop.IOLoop.instance()) self.conn.on_disconnect=self.on_queue_disconnect self.conn.on_error=self.on_queue_error self.conn.connect(self.on_connect) def __init__(self,Queue_Server,Queue_User,Queue_PassWord,Queue_Path,BackQueueName,Queue_Port=None): self.Queue_Server=Queue_Server self.Queue_User=Queue_User self.Queue_PassWord=Queue_PassWord self.Queue_Path=Queue_Path self.Queue_Port=Queue_Port self.back_queue="WSBack-%s.resback"%BackQueueName self._start_new_connect() def on_connect(self): if self.conn.status!=status.OPENED: print 'connect rabbitmq fail' self.conn.close(self.stop) else: print 'connect rabbitmq success' self.channel = self.conn.channel() self.channel.qos(prefetch_count=1) self.channel.exchange_declare('front_end',type='topic',durable=True,callback=self.on_exchange_declare) def on_exchange_declare(self): self.channel.queue_declare(self.back_queue,auto_delete=True,callback=self.on_queue_back_created,durable=False) print "exchange %s created"%'front_end' #self.task_queue=qinfo.queue global start_notified if start_notified==False: start_notified=True msg=Message(body='{"func":"front_end_restart","parm":{}}',delivery_mode=2,reply_to=self.back_queue) self.publish(msg) def on_queue_back_created(self,qinfo): print "back queue %s created"%qinfo.queue self.back_queue=qinfo.queue self.channel.queue_bind(self.back_queue,'front_end',self.back_queue,self.on_backqueue_bind) consumer = Consumer(self.consume_callback) self.channel.consume(qinfo.queue, consumer, no_ack=True) def on_backqueue_bind(self): print "back queue %s bind"%self.back_queue def consume_callback(self,msg): connid=msg.headers.get("connid",None) if connid: connids=connid.split("$") for oneid in connids: conn=connection_list.get(oneid,None) if conn: if int(msg.headers.get("close_connect",0)): connection_list.pop(conn.connid,'') conn.close() conn.on_close() continue compressed=msg.headers.get('compression')=='application/x-gzip' conn.SendData(msg.body,compressed) def on_queue_disconnect(self): time.sleep(5) self._start_new_connect() def on_queue_error(self,err): time.sleep(5) self._start_new_connect() def publish(self,msg): self.channel.publish(msg,'front_end','task.front')