Pub / sub基于事件 - Python

时间:2017-04-04 11:07:09

标签: python amazon-web-services events publish-subscribe amazon-sns

我正在尝试构建一个系统,我可以根据他们对某些事件的订阅向不同用户发送消息。基本上我有一个api,它给我直播活动。一些用户将订阅这些活动。我的任务是在发生此类事件时向这些用户发送消息。我正在尝试用Python设计系统。

目前我有以下问题。

  • 如何在Python中不断轮询来自实时流api的事件。
  • 如何找出哪些用户订阅了该特定活动。 (Redis或Mysql)
  • 如何向特定活动的所有用户发送通知。 (发布/订阅)

我正在考虑使用Amazon SNS。但对整体架构不太确定。

1 个答案:

答案 0 :(得分:0)

  

RabbitMQ是轻量级的,易于在内部部署和部署   云。它支持多种消息传递协议。 RabbitMQ可以   部署在分布式和联合配置中以满足   高规模,高可用性要求。

只是一个小例子:

生产者将消息发送到“hello”队列。使用者从该队列接收消息。这将在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()