RabbitMQ消息订阅与轮询

RabbitMQ消息订阅与轮询
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
  •  使用向队列注册消费者,当RabbitMQ服务端的队列接收到消息后推送给客户端,这种方式为消息订阅模式。
  •  RabbitMQ客户端也可通过主动查询的方式,从服务端获取消息。使用主动查询的消费者示例如下。
public static void main(String[] args) throws Exception {
    
    ConnectionFactory factory = new ConnectionFactory();
    // 设置服务端的地址、端口、用户名和密码...
    
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();
    
    // 从队列中获取消息,不自动确认
    GetResponse response  = channel.basicGet("Queue_Java", false);
    if(null != response) {
        byte[] body = response.getBody();
        String message = new String(body);
        System.out.println("Received: " + message);
        // 手工确认
        long deliveryTag = response.getEnvelope().getDeliveryTag();
        channel.basicAck(deliveryTag, false);
    }
    
    channel.close();
    connection.close();
}

  在示例程序中,消费者主动向服务端请求一条消息,并在输出控制台后手工确认。在获取消息的那段代码外层加上循环,连续不断向服务端队列获取消息,这就是获取消息的第二种方式——轮询。可从以下几方面对比订阅和轮询两种获取消息的方式。
  1.订阅方式需服务端维护消息的传输状态,失败需重试,轮询则需客户端对传输失败进行处理;
  2.订阅方式当消息队列有消息时即可得到推送,实时性较好,轮询的实时性依赖于轮询间隔;
  3.订阅方式需服务端针对各消费者的处理能力做流量控制,使用轮询方式时,消费者可依照自身处理能力决定是否获取新的消息。
 

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18675

发表评论