RabbitMQ之Consumer

RabbitMQ-java-client版本

  1. com.rabbitmq:amqp-client:4.3.0
  2. RabbitMQ版本声明: 3.6.15

Consumer

  1. RabbitMQ的消费模式分为两种:Push(服务端推)Pull(客户端拉)Push(推)采用Basic.Consume进行消费,Pull(拉)是调用Basic.Get进行消费.在RabbitMQPull(拉)适合单条消费,Push(推)适合持续订阅

推拉模式代码

  1. 推模式代码示例

        @Test
        public void testNoAuotAckSync() {
         
            String userName = "jannal";
            String password = "jannal";
            String virtualHost = "jannal-vhost";
            String hostName = "jannal.mac.com";
            String queueName = "jannal.direct.queue";
            int portNumber = 5672;
            ConnectionFactory factory = new ConnectionFactory();
            factory.setUsername(userName);
            factory.setPassword(password);
            factory.setVirtualHost(virtualHost);
            factory.setHost(hostName);
            factory.setPort(portNumber);
            factory.setAutomaticRecoveryEnabled(false);
    
            Connection conn = null;
            try {
         
                conn = factory.newConnection();
                final Channel channel = conn.createChannel();
                //设置客户端最多接收未被ack的消息的个数
                channel.basicQos(1);
                //不自动确认
                boolean autoAck = false;
                //true表示不能将一个Connection中生产者发送的消息传送给这个Connection中的消费者
                boolean noLocal = false;
                //是否独占
                boolean exclusive = false;
                //不同的订阅采用不同的消费者标签
                String consumerTag = "consumerTag";
                //basicConsume是一个同步方法
                channel.basicConsume(queueName, autoAck, consumerTag, noLocal, exclusive, null, new DefaultConsumer(channel) {
         
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
         
    
                        long deliveryTag = envelope.getDeliveryTag();
                        System.out.println("Consumer1:"+new String(body, "utf-8"));
                        channel.basicAck(deliveryTag, false);
                        //channel.basicReject(deliveryTag,true);
    
                    }
                });
    
                // 阻止主程序结束
                LockSupport.park();
            } catch (IOException e) {
         
                logger.error(e.getMessage(), e);
            } catch (TimeoutException e) {
         
                logger.error(e.getMessage(), e);
            } finally {
         
                if (conn != null) {
         
                    
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值