Мой код подписки RabbitMQ не работает - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь получать уведомления от 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.Но есть ли еще один шаг или чего-то не хватает ?!Почему это ничего не показывает?

1 Ответ

0 голосов
/ 15 декабря 2018

Ваш скрипт работает отлично.Я отправил сообщение в очередь с именем simple_queue, используя обмен ProgressNotification, и ваш сценарий был напечатан.

b'Hello World! '

Я использовал этот сценарий на основев моей собственной библиотеке RabbitMQ, но вы можете просто использовать этот пример 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 + "'");
        }
    }
}
...