activeMq 延迟消息发送以及相关配置实例
首先要activemq中找到activemq.xml文件,并在broker元素里添加schedulerSupport=“true”
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">
下面是发送ObjectMessage延迟消息的实例,废话不多说上代码
/**
* 对象消息传参 定时发送
* @param queueName 队列名称
* @param data 对象
* @param time 毫秒
* @param <T>
*/
public <T extends Serializable> void delaySendObjectMessage(String queueName, T data, Long time) {
Destination destination = new ActiveMQQueue(queueName);
Connection connection = null;
Session session = null;
MessageProducer producer = null;
// 获取连接工厂
ConnectionFactory connectionFactory = mqConfig.connectionFactory();
try {
// 获取连接
connection = connectionFactory.createConnection();
connection.start();
// 获取session,true开启事务,false关闭事务
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 创建一个消息队列
producer = session.createProducer(destination);
producer.setDeliveryMode(JmsProperties.DeliveryMode.PERSISTENT.getValue());
ActiveMQObjectMessage objectMessage = new ActiveMQObjectMessage();
objectMessage.setObject(data);
//设置延迟时间
objectMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, time);
// 发送消息
producer.send(objectMessage);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (producer != null) {
producer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}