-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()