ActiveMQ中如何设置消息的最大大小?

ActiveMQ 中可以通过以下方式设置消息的最大大小:

  1. Broker 端设置消息最大大小:
<policyEntry queue=">">
  <messageSizePolicy maxSize="10485760" />  <!-- 设置消息最大为10MB -->
</policyEntry> 

此设置将限制所有的队列消息最大为10MB。

  1. 生产者端设置消息最大大小:
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 即可限制单条消息的最大大小。消费端收到的消息体积不会超过此设置。

  1. 消费者端限制接收消息的最大大小:
MessageConsumer consumer = sess.createConsumer(queue);

// 消息过滤,只接收小于10MB的消息 
consumer.setMessageSelector("NMS_MESSAGE_SIZE <= 10485760"); 

Message message = consumer.receive();

使用消息选择器根据 NMS_MESSAGE_SIZE 属性过滤消息,限制接收消息的最大体积。