【问题标题】:Pub/sub based on events - Python基于事件的发布/订阅 - Python
【发布时间】:2017-04-04 11:07:09
【问题描述】:

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

目前我有以下问题。

  • 如何通过 Python 中的实时流 API 持续轮询事件。
  • 如何找出哪些用户订阅了该特定事件。 (Redis 或 Mysql)
  • 如何向特定事件的所有用户发送通知。 (发布/订阅)

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

【问题讨论】:

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


    【解决方案1】:

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

    只是一个小例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 2018-12-20
      • 1970-01-01
      相关资源
      最近更新 更多