У меня есть программа на Java, которая отправляет сообщения RabbitMQ. Все, что я знаю, это название биржи. Никаких очередей, привязок и тд.

У меня такой вопрос: как я могу узнать, успешно ли программа их отправляет, зная только имя обмена?

Спасибо.

С уважением, Сербан

1
Serban Stoenescu 30 Окт 2015 в 12:53

3 ответа

Лучший ответ

Вы можете включить подтверждение издателя с RabbitMQ. Это похоже на отправку транзакции, где RabbitMQ сообщит вам, было ли сообщение отправлено успешно.

2
Derick Bailey 30 Окт 2015 в 15:35

Предположим, что у нас есть RabbitMQ Exchange, нам нужно создать очередь, чтобы отправить сообщение на обмен и потреблять его из очереди, как показано ниже.


    private static final String EXCHANGE_NAME = "2022";
    private static final String QUEUE_NAME = "2022";
    private final static boolean durable = true;

// now we need to create a connection to rabbitmq server //

        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        Connection conn = factory.newConnection();
       // create rabbitmq connection chaneel        
       Channel channel = conn.createChannel();
      //Declare Exchange // 
      channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
     // push message to rabbitmq exchange 

channel.basicPublish(EXCHANGE_NAME, "routingkey", null, yourmessage.getBytes());



Указанная выше работа в качестве производителя, теперь нам нужно создать потребителя очереди


    private static final String EXCHANGE_NAME = "2022";
    private static final String QUEUE_NAME = "2022";
    private final static boolean durable = true;

// now we need to create a connection to rabbitmq server //

        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        Connection conn = factory.newConnection();
        // create rabbitmq connection chaneel       
        Channel channel = conn.createChannel();


          channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);

          //Queue Declare //
          channel.queueDeclare(QUEUE_NAME, true, false, false, null);
         //Queue bind //
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "routingkey");
        // Queue Consume // 
        QueueingConsumer consumer = new QueueingConsumer(channel);

  while (true)
        {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());

            System.out.println(" [x] Received '" + message + "'");


        }


0
Tareq Moh Qadommi 3 Ноя 2015 в 12:18

Смотрите здесь: https://www.rabbitmq.com/tutorials/tutorial-three -java.html

String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, EXCHANGE_NAME, "");

    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

    Consumer consumer = new DefaultConsumer(channel) {
      @Override
      public void handleDelivery(String consumerTag, Envelope envelope,
                                 AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println(" [x] Received '" + message + "'");
      }
    };
    channel.basicConsume(queueName, true, consumer);

В двух словах, вам необходимо:

  1. создать очередь, в данном случае анонимную очередь
  2. привязать очередь к вашей бирже

Важно знать, какой у вас тип exchange, поскольку привязка может меняться между fanout, topic или direct

В этом примере fanout

0
Gabriele 30 Окт 2015 в 10:14