RabbitMQ有两种对队列长度的限制方式
- 对队列中消息的条数进行限制 x-max-length
- 对队列中消息的总量进行限制 x-max-length-bytes
对消息总条数进行限制(总条数包括未被消费的消息+被消费但未被确认的消息):
public class QueueLengthLimit {
private static final String QUEUE_NAME = "queueLengthLimit";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel senderChannel = connection.createChannel();
Channel consumerChannel = connection.createChannel();
// 设置队列最大消息数量为5
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-length", 5);
args.put("x-dead-letter-exchange","normal_exchange");
args.put("x-dead-letter-routing-key","normal");
senderChannel.queueDeclare(QUEUE_NAME