[原始碼分析] 訊息佇列 Kombu 之 Producer
阿新 • • 發佈:2021-03-13
# [原始碼分析] 訊息佇列 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