-2

我想建立一個系統,我可以根據他們的訂閱某些事件發送消息給不同的用戶。基本上我有一個API給我直播的事件。一些用戶將訂閱這些事件。我的任務是在發生這種事件時向這些用戶發送消息。我試圖用Python設計系統。Pub/sub基於事件 - Python

目前我有以下問題。

  • 如何從Python中的直播api持續查詢事件。
  • 如何找出哪些用戶訂閱了該特定事件。 (Redis或Mysql)
  • 如何向所有特定事件的用戶發送通知。 (Pub/sub)

我想使用Amazon SNS。但對整體架構不太確定。

回答

0

RabbitMQ重量輕,易於在雲端部署和部署。它支持多種消息傳遞協議。 RabbitMQ可以部署爲分佈式和聯合配置的 ,以滿足高規模,高可用性要求。

僅有小例子:

生產者將消息發送到 「你好」 隊列。消費者接收來自該隊列的消息。這將在RabbitMQ集羣上創建一個包含消息的隊列(hello)。

#!/usr/bin/env python 
import pika 

RABBITMQ_USERNAME = 'ansible' 
RABBITMQ_PASSWORD = 'ansible' 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='example.eu-central-1.elb.amazonaws.com', 
     heartbeat_interval=25, 
     credentials=pika.PlainCredentials(RABBITMQ_USERNAME,RABBITMQ_PASSWORD))) 

channel = connection.channel() 

channel.queue_declare(queue='hello') 

channel.basic_publish(exchange='', 
         routing_key='hello', 
         body='Hello World!') 
print(" [x] Sent 'Hello World!'") 
connection.close() 

來自名爲隊列接收消息:

#!/usr/bin/env python 
import pika 

RABBITMQ_USERNAME = 'ansible' 
RABBITMQ_PASSWORD = 'ansible' 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='example.elb.amazonaws.com', 
     heartbeat_interval=25, 
     credentials=pika.PlainCredentials(RABBITMQ_USERNAME,RABBITMQ_PASSWORD))) 

channel = connection.channel() 

channel.queue_declare(queue='hello') 

def callback(ch, method, properties, body): 
    print(" [x] Received %r" % body) 

channel.basic_consume(callback, 
         queue='hello', 
         no_ack=True) 

print(' [*] Waiting for messages. To exit press CTRL+C') 
channel.start_consuming()