ActiveMQ 中可以通过以下方式设置消息的最大大小:
- Broker 端设置消息最大大小:
<policyEntry queue=">">
<messageSizePolicy maxSize="10485760" /> <!-- 设置消息最大为10MB -->
</policyEntry>
此设置将限制所有的队列消息最大为10MB。
- 生产者端设置消息最大大小:
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://broker:61616");
Connection conn = cf.createConnection();
conn.start();
Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = sess.createProducer(sess.createQueue("queue"));
producer.setTimeToLive(3600000); // 1小时过期
producer.setDisableMessageID(true);
producer.setDisableMessageTimestamp(true);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.setPriority(4);
int maxSize = 10485760; // 10MB
producer.setSendBufferSize(maxSize); //设置消息最大大小
producer.send(sess.createTextMessage("Hello"));
设置发送缓冲区大小 sendBufferSize 即可限制单条消息的最大大小。消费端收到的消息体积不会超过此设置。
- 消费者端限制接收消息的最大大小:
MessageConsumer consumer = sess.createConsumer(queue);
// 消息过滤,只接收小于10MB的消息
consumer.setMessageSelector("NMS_MESSAGE_SIZE <= 10485760");
Message message = consumer.receive();
使用消息选择器根据 NMS_MESSAGE_SIZE 属性过滤消息,限制接收消息的最大体积。