2011-03-23 2 views
2

내 네트워크에서 여러 대의 클라이언트에서 소프트웨어를 실행하고 있습니다. 나는 각 클라이언트간에 메시지를 전달하기위한 솔루션으로 RabbitMQ를 가지고 놀았습니다.RabbitMQ는 특정 클라이언트에게 메시지를 전달할 수 있습니까? 또는 클라이언트 측에서 이러한 검사를 수행해야합니까?

#!/usr/bin/python2 

import pika 
import time 

connection = pika.AsyncoreConnection(pika.ConnectionParameters(
       'localhost')) 
channel = connection.channel() 

def callback(ch, method, properties, body): 
    # send messages back on certain events 
    if body == '5': 
     channel.basic_publish(exchange='', 
           routing_key='test', 
           body='works') 

    print body 

channel.queue_declare(queue='test') 
channel.basic_consume(callback, queue='test', no_ack=True) 

for i in range(0, 8): 
    channel.basic_publish(exchange='', 
          routing_key='test', 
          body='{}'.format(i)) 

    time.sleep(0.5) 

channel.close() 

사진이는 '채팅 프로그램'의 종류로 :

내 테스트 코드는 이것이다. 각 클라이언트는 지속적으로 메시지를 청취해야합니다. 때로는 클라이언트가 메시지를 서버로 다시 보내야합니다.

이 코드는 작동하지만 문제가 발생했습니다. 아래 코드가 works 메시지를 보내면 RabbitMQ 큐에서 메시지를 다시 가져옵니다. 내 고객 인 생산자와 소비자에게 방금 보낸 메시지를받지 못하게하는 방법이 있습니까?

내가의 형태로 메시지를 보낼 거라고 생각 그래서 내가 RabbitMQ에 내장 된이 기능을 볼 수 없습니다 :

body='{"client_id" : 1, "message" : "this is the message"}' 

그럼 내가 그 문자열을 구문 분석하고 client_id을 확인할 수 있습니다. 클라이언트는 그때 예정된 모든 메시지를 무시할 수 있습니다.

더 좋은 방법이 있습니까? RabbitMQ에 대한 대안을 찾아야합니까?

답변

1

RabbitMQ에 큐를 추가 할 수 있습니다. 왜 각 클라이언트에 대한 대기열뿐만 아니라 서버에 대한 메시지 대기열도 없습니까?

관련 문제