2016-05-02 21 views
2

私は自分のサーバーにRabbitMQを実装しました。基本的には、メインサーバーがワーカーサーバーにメッセージを渡すことです。 私が直面している問題は、私が渡すすべてのメッセージがサーバーによって受信されないということです。 つまり、10個のメッセージを送信した場合は、そのうちの4個だけが受信されます。rabbitmqメッセージが受信者の部分にありません

私は間違っています。コード

import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='localhost')) 
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() 

パブリッシングコードあなたは(あなたがそうでないショーを掲載例として)同じキューに公開していると仮定すると

import pika 
import sys 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='localhost')) 
channel = connection.channel() 

channel.queue_declare(queue='task_queue', durable=True) 

message = ' '.join(sys.argv[1:]) or "Hello World!" 
channel.basic_publish(exchange='', 
         routing_key='task_queue', 
         body=message, 
         properties=pika.BasicProperties(
         delivery_mode = 2, # make message persistent 
        )) 
print(" [x] Sent %r" % message) 
connection.close() 
+1

他の誰も同じキューを聞いていないと確信していますか?私が直面している問題の最も一般的なものです。 – Abhishek

+0

@Abhishek私は2人のリストを持っていますが、10個の要素を渡しています。他のリスナーが同じ待ち行列に耳を傾けることはありません –

+0

あなたのパブリッシングコードも提供できますか? –

答えて

0

を受け

confirm deliveryフラグを有効にすることをお勧めします。これにより、メッセージが確実に配信されます。そうでない場合は、例外がスローされるか、パブリッシュされるとFalseが返されます。

channel = connection.channel() 
channel.confirm_delivery() 
published = channel.basic_publish(...) 
if not published: 
    raise Exception("Unable to publish message!") 

またRabbitMQのためmanagement pluginをインストールし、あなたがメッセージを消費し始める前にキューを検査する価値があるかもしれません。この方法で、メッセージが公開され、後で消費されたことを確認できます。

関連する問題