波仔膏 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 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))