1

我有一个 Java 程序,可以向 RabbitMQ 发送消息。我只知道交易所名称。没有队列、绑定等。

我的问题是:我怎样才能看到程序是否成功发送这些,只知道交换名称?

谢谢。

问候, 塞尔班

4

3 回答 3

2

您可以使用 RabbitMQ启用发布者确认。这就像有一个发送事务,RabbitMQ 会告诉你消息是否发送成功。

于 2015-10-30T15:35:28.737 回答
0

请看这里: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你有什么样的绑定,因为绑定可以在fanouttopic或之间改变direct

在这个例子中是fanout

于 2015-10-30T10:14:47.927 回答
0

假设我们有 RabbitMQ Exchange,我们需要创建一个队列来将消息推送到 Exchange 并从队列中使用它,如下所示

    私有静态最终字符串 EXCHANGE_NAME = "2022";
    私有静态最终字符串 QUEUE_NAME = "2022";
    私有最终静态布尔持久=真;

// 现在我们需要创建一个到 rabbitmq 服务器的连接 //

        ConnectionFactory 工厂 = new ConnectionFactory();
        factory.setUsername("客人");
        factory.setPassword("客人");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        连接连接 = factory.newConnection();
       // 创建rabbitmq连接通道        
       频道频道 = conn.createChannel();
      //声明交换//
      channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
     // 推送消息到rabbitmq exchange

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



上面作为生产者的工作现在我们需要创建队列消费者

    私有静态最终字符串 EXCHANGE_NAME = "2022";
    私有静态最终字符串 QUEUE_NAME = "2022";
    私有最终静态布尔持久=真;

// 现在我们需要创建一个到 rabbitmq 服务器的连接 //

        ConnectionFactory 工厂 = new ConnectionFactory();
        factory.setUsername("客人");
        factory.setPassword("客人");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        连接连接 = factory.newConnection();
        // 创建rabbitmq连接通道       
        频道频道 = conn.createChannel();


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

          //队列声明 //
          channel.queueDeclare(QUEUE_NAME, true, false, false, null);
         //队列绑定 //
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "routingkey");
        // 队列消费 //
        QueueingConsumer 消费者 = 新 QueueingConsumer(channel);

  而(真)
        {
            QueueingConsumer.Delivery 交付 = consumer.nextDelivery();
            字符串消息 = new String(delivery.getBody());

            System.out.println(" [x] 收到'" + 消息 + "'");


        }


于 2015-11-03T12:18:40.240 回答