-2

특정 이벤트 구독에 따라 다른 사용자에게 메시지를 보낼 수있는 시스템을 구축하려고합니다. 기본적으로 나는 살아있는 시내 사건을주는 API가있다. 일부 사용자는 해당 이벤트를 구독하게됩니다. 내 작업은 이러한 이벤트가 발생할 때마다 해당 사용자에게 메시지를 보내는 것입니다. 파이썬으로 시스템을 설계하려고합니다.이벤트 기반 Pub/sub - Python

현재 다음 질문이 있습니다.

  • 파이썬에서 실시간 스트림 API의 이벤트를 지속적으로 폴링하는 방법.
  • 특정 이벤트에 가입 한 사용자를 찾는 방법. (Redis 또는 Mysql)
  • 특정 이벤트의 모든 사용자에게 알림을 보내는 방법. (게시/하위)

아마존 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()