【问题标题】:Rabbitmq - how to listen to messages on an exchangeRabbitmq - 如何在交易所收听消息
【发布时间】:2015-10-30 09:53:06
【问题描述】:

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

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

谢谢。

问候, 塞尔维亚

【问题讨论】:

    标签: rabbitmq rabbitmq-exchange


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      请看这里: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 类型很重要,因为绑定可以在fanouttopicdirect 之间更改

      在这个例子中是fanout

      【讨论】:

        【解决方案3】:

        假设我们有 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] 收到'" + 消息 + "'"); }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-23
          相关资源
          最近更新 更多