我已经在我的服务器中实现了RabbitMQ。所以基本上它的作用是主服务器将消息传递给工作服务器。 我面临的问题是服务器没有收到我传递的所有消息。 即如果我发送10条消息,则只收到4条消息。
知道我哪里错了。
接收代码
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()
答案 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并检查队列也是值得的。通过这种方式,您可以验证消息是否已发布,以后消耗。