有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Rabbitmq,从客户端接收消息

我有一个简单的生产者和接受者类来使用rabbitmq

制作人:

public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);

    String message = getMessage(argv);

    channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
    System.out.println(" [x] Sent '" + message + "'");

    channel.close();
    connection.close();
  }

和接收人:

public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
    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);
  }

问题是,制作人是否有可能知道是接收者接收了信息。例如:

 channel.sendAndReceiveMessage(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
        System.out.println(" [x] Sent '" + message + "'");

共 (1) 个答案

  1. # 1 楼答案

    Short answser:你没有直接的方式让制作人知道消费者确认了信息 长一点: 您在此处发送的第二个参数: 频道基本消费(queueName、true、consumer); 是自动确认,将其设置为false将强制您进行频道设置。basicAck(deliveryTag,假);确认收到信息(您可以从信封中获取递送标签)或频道。basicNack告诉我有些事失败了 这是什么意思?这意味着,如果您不确认消息,它将返回队列并等待再次被消费,这样,您就可以确保所有消息都被消费