基于事件的发布/订阅- Python

2024-04-20 15:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个系统,在这个系统中,我可以根据不同用户对特定事件的订阅向他们发送消息。基本上,我有一个api,让我实时流事件。一些用户将订阅这些活动。我的任务是在发生此类事件时向这些用户发送消息。我正在尝试用Python设计这个系统。你知道吗

目前我有以下问题。你知道吗

  • 如何从Python中的livestreamapi持续轮询事件。你知道吗
  • 如何找出哪些用户订阅了该特定事件。(Redis或Mysql)
  • 如何向特定事件的所有用户发送通知。(发布/订阅)

我正在考虑使用亚马逊SNS。但不太清楚整体架构。你知道吗


Tags: 用户redisapi消息架构系统mysql事件
1条回答
网友
1楼 · 发布于 2024-04-20 15:16:52

RabbitMQ is lightweight and easy to deploy on premise and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements.

举个小例子:

Producer向“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()

相关问题 更多 >