怎樣讓Consumer不立即消費(fèi)消息并使消息重入隊(duì)列?
更新時(shí)間:
您可以通過basicReject或basicNack方法否定應(yīng)答消息,使消息重入隊(duì)列,從而是其他Consumer可以消費(fèi)消息。
使用basicReject方法否定應(yīng)答單條消息并使消息重入隊(duì)列
您可以使用basicReject方法實(shí)現(xiàn)Consumer否定應(yīng)答單條消息并使其重入隊(duì)列。
- basicReject方法的參數(shù)說明如下:
- deliveryTag:Channel的消息投遞的唯一標(biāo)識(shí)符。
- requeue:被否定應(yīng)答的消息是否重入隊(duì)列。如果設(shè)置為true,則消息重入隊(duì)列;如果設(shè)置為false,則消息被丟棄或發(fā)送到死信Exchange。更多信息,請(qǐng)參見死信Exchange。
- basicReject方法的示例代碼如下:
channel.basicConsume("test", false, "consumertag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("Rejected: " + new String(body, "UTF-8") + ", deliveryTag: " + envelope.getDeliveryTag() + ", messageId: " + properties.getMessageId()); channel.basicReject(envelope.getDeliveryTag(), true); } });
使用basicNack方法否定應(yīng)答多條消息并使消息重入隊(duì)列
您可以使用basicNack方法實(shí)現(xiàn)Consumer否定應(yīng)答多條消息并使其重入隊(duì)列。
- basicNack方法的參數(shù)說明如下:
- deliveryTag:Channel的消息投遞的唯一標(biāo)識(shí)符。
- multiple:是否否定應(yīng)答多條消息。如果設(shè)置為true,則否定應(yīng)答帶指定deliveryTag的消息及該deliveryTag之前的多條消息;如果設(shè)置為false,則僅否定應(yīng)答帶指定deliveryTag的單條消息。
- requeue:被否定應(yīng)答的消息是否重入隊(duì)列。如果設(shè)置為true,則消息重入隊(duì)列;如果設(shè)置為false,則消息被丟棄或發(fā)送到死信Exchange。更多信息,請(qǐng)參見死信Exchange。
- basicNack方法的示例代碼如下:
channel.basicConsume("test", false, "consumertag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("Rejected: " + new String(body, "UTF-8") + ", deliveryTag: " + envelope.getDeliveryTag() + ", messageId: " + properties.getMessageId()); channel.basicNack(envelope.getDeliveryTag(), true, true); } });
文檔內(nèi)容是否對(duì)您有幫助?