【问题标题】:My RabbitMQ subscription code doesn't work我的 RabbitMQ 订阅代码不起作用
【发布时间】:2018-12-14 23:10:38
【问题描述】:

我正在尝试从位于服务器上的RabbitMQ 获取通知。我被告知使用此代码,它应该打印进度通知。但是在运行代码并将作业提交到队列时,我什么也没看到。该代码不打印任何内容:

import pika

rabbitMqHost = 'host'
rabbitMqUser = 'user'
rabbitMqPass = 'password'
exchangeName = 'ProgressNotification'


credentials = pika.PlainCredentials(rabbitMqUser, rabbitMqPass)

connection = pika.BlockingConnection(pika.ConnectionParameters(rabbitMqHost, 5672, '/', credentials))
channel = connection.channel()

# channel.exchange_delete(exchange=exchangeName)
# exit(3)

channel.exchange_declare(exchange=exchangeName, exchange_type='fanout')

result = channel.queue_declare()
queue_name = result.method.queue

channel.queue_bind(exchange=exchangeName,
                   queue=queue_name)


def callback(ch, method, properties, body):
    print("> %r" % (body,))

channel.basic_consume(callback,
                      queue=queue_name,
                      no_ack=True)

channel.start_consuming()

抱歉,我是 RabbitMQ 的新手。但是是否还有其他步骤或缺少什么?!为什么什么都不显示?

【问题讨论】:

    标签: java python rabbitmq pika


    【解决方案1】:

    您的脚本运行良好。我使用交换器ProgressNotification 将消息推送到名为 simple_queue 的队列,并打印了您的脚本。

    b'Hello World!'

    我使用了这个脚本,基于我自己的 RabbitMQ 库,但您可以使用 this pika 示例作为参考。

    from amqpstorm import Connection
    from amqpstorm import Message
    
    with Connection('127.0.0.1', 'guest', 'guest') as connection:
        with connection.channel() as channel:
            # Declare the Queue, 'simple_queue'.
            channel.queue.declare('simple_queue')
    
            # Create the message.
            message = Message.create(channel, 'Hello World!')
    
            # Publish the message to a queue called, 'simple_queue'.
            message.publish('simple_queue', exchange='ProgressNotification')
    

    在 Java 中,您需要像这样发布消息。

    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    
    public class Send {
    
        private final static String QUEUE_NAME = "simple_queue";
        private final static String EXCHANGE_NAME = "ProgressNotification";
    
        public static void main(String[] argv) throws Exception {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
            try (Connection connection = factory.newConnection();
                 Channel channel = connection.createChannel()) {
                channel.queueDeclare(QUEUE_NAME, false, false, false, null);
                String message = "Hello World!";
                channel.basicPublish(EXCHANGE_NAME, QUEUE_NAME, null, message.getBytes("UTF-8"));
                System.out.println(" [x] Sent '" + message + "'");
            }
        }
    }
    

    【讨论】:

    • 你的代码看起来很简洁!所以没有你的图书馆我就不能使用它?
    • 你不能,但我可以用 pika 给你一个类似的例子我一两天(正在旅行)
    • 如果我的代码已经可以运行,不用担心。我想知道为什么它不打印任何东西。
    • 无需分享您的代码。为此,我将需要使用 Java。如果您可以共享 Java 等价物,那就太好了!
    • 我还添加了 Java 版本@TinaJ。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2014-06-11
    • 1970-01-01
    • 2016-04-24
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多