当前位置: 首页 > 后端技术 > Python

komburegister_callback和on_message有什么区别?

时间:2023-03-25 19:58:26 Python

register_callback添加的函数接收两个参数fromkombu.transport.pyamqpimportMessagedefcallback(body,message:Message):logger.debug(type(body))logger.debug(message)logger.debug(message.body)message。ack()register_callback添加的函数接收一个参数fromkombu.transport.pyamqpimportMessagedefcallback(message:Message):logger.debug(type(body))logger.debug(message)logger.debug(message.body)message。ack()相关的代码可见:kombu/messaging.pydef_receive_callback(self,message):accept=self.accepton_m,channel,decoded=self.on_message,self.channel,Nonetry:m2p=getattr(channel,'message_to_python',None)ifm2p:message=m2p(message)ifacceptisnotNone:message.accept=acceptifmessage.errors:returnmessage._reraise_error(self.on_decode_error)decoded=Noneifon_melsemessage.decode()除了作为exc的异常:如果不是self.on_decode_error:raiseself.on_decode_error(message,exc)else:returnon_m(message)ifon_melseself.receive(decoded,message)从上面可以看出,如果需要kombu帮你解码,可以选择register_callback;但是让kombu做decode有一个缺点,就是decode失败的话,没有办法重新排队消息。只能选择“先关闭连接,再重新连接”。这个时候我更喜欢用on_message自己处理decode

最新推荐
猜你喜欢