波仔膏 2019-06-04 14:25 采纳率: 0%
浏览 2704

rabbitmq如何让消费者取消接收消息?

Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            channel.basicQos(1);
            Map<String,Object> argsx= new HashMap<String,Object>();
            argsx.put("x-max-priority",100);
            //声明队列
            channel.queueDeclare(QUEUE_2019, true, false, false,argsx);
            //交换机声明
            channel.exchangeDeclare(Exchange_2019, "direct");
            //交换机和队列绑定
            channel.queueBind(QUEUE_2019,Exchange_2019,"key2019");

            Consumer consumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body)throws IOException {

                    try {
                        String message = new String(body, "UTF-8");
                        System.out.println("Customer Received '" + message + "'");

                    } catch (Exception e) {
                        e.printStackTrace();
                    }finally {
                        channel.basicAck(envelope.getDeliveryTag(),false);
                    }
                }
                @Override
                public void handleCancel(String consumerTag) throws IOException {
                    // consumer has been cancelled unexpectedly
                    System.out.println("handleCancel");
                }
                @Override
                public void handleCancelOk(String consumerTag) {
                    System.out.println("收到来自消息中间件代理的basic.cancel-ok回复,consumerTag=" + consumerTag);
                }

            };
            String ctag=channel.basicConsume(QUEUE_2019,false,consumer);
            System.out.println("绑定消费者完毕,输入任何字符串终止消费者"+ctag);
            System.in.read();
            channel.basicCancel(ctag);
            System.out.println("输入任何字符串开启消费者");
            System.in.read();
            channel.basicConsume(QUEUE_2019,false,consumer);
  • 写回答

1条回答 默认 最新

  • qq_33422712 2019-06-04 17:46
    关注
            //1.处理出现问题,消息重回队列(Unacked->Ready),存放在队列的首。
            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
    
            //2.确认消息消费,可以在本地存档的那份标记为未成功消费。
            //channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    
            //3拒绝消息
            //channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏