1. 程式人生 > >[原始碼分析] 訊息佇列 Kombu 之 Producer

[原始碼分析] 訊息佇列 Kombu 之 Producer

# [原始碼分析] 訊息佇列 Kombu 之 Producer [toc] ## 0x00 摘要 本系列我們介紹訊息佇列 Kombu。Kombu 的定位是一個相容 AMQP 協議的訊息佇列抽象。通過本文,大家可以瞭解 Kombu 中的 Producer 概念。 ## 0x01 示例程式碼 下面使用如下程式碼來進行說明。 本示例來自https://liqiang.io/post/kombu-source-code-analysis-part-5系列,特此深表感謝。 ```python def main(arguments): hub = Hub() exchange = Exchange('asynt_exchange') queue = Queue('asynt_queue', exchange, 'asynt_routing_key') def send_message(conn): producer = Producer(conn) producer.publish('hello world', exchange=exchange, routing_key='asynt_routing_key') print('message sent') def on_message(message): print('received: {0!r}'.format(message.body)) message.ack() # hub.stop() # <-- exit after one message conn = Connection('redis://localhost:6379') conn.register_with_event_loop(hub) def p_message(): print(' kombu ') with Consumer(conn, [queue], on_message=on_message): send_message(conn) hub.timer.call_repeatedly(3, p_message) hub.run_forever() if __name__ == '__main__': sys.exit(main(sys.argv[1:])) ``` ## 0x02 來由 前文已經完成了構建部分,Consumer部分,下面來到了Producer部分,即如下程式碼: ```python def send_message(conn): producer = Producer(conn) producer.publish('hello world', exchange=exchange, routing_key='asynt') print('message sent') ``` 我們知道,Transport需要把Channel與檔案資訊聯絡起來,但是此時Transport資訊如下,檔案資訊依然沒有,這是我們以後需要留意的: ```python transport = {Tra