引入依赖
<!--rabbitmq依赖 -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.4.14</version>
</dependency>
rabbitmq.properties
rmq.host=127.0.0.1
rmq.port=5672
rmq.username=admin
rmq.password=admin
配置spring-rabbitmq.xml。注意点:配置x-message-ttl时要求为整数,value值为String,所以要用#{T(java.lang.Integer).parseInt(‘10000’)}的方式转化为整数。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-2.4.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 加载properties 配置文件 -->
<context:property-placeholder location="classpath:rabbitmq.properties" />
<rabbit:connection-factory id="connectionFactory" host="127.0.0.1" port="5672" username="admin"
password="admin"/>
<!-- RabbitMQ模板 -->
<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" />
<!-- RabbitMQ管理器 -->
<rabbit:admin connection-factory="connectionFactory" />
<!-- 回收站队列 -->
<rabbit:queue name="recycleBinQueue" />
<!-- 延时队列 -->
<rabbit:queue name="recycleBinDelayedQueue">
<rabbit:queue-arguments>
<!-- 指定死信交换机为空 -->
<entry key="x-dead-letter-exchange" value="" />
<!-- 指定死信队列为回收站队列 -->
<entry key="x-dead-letter-routing-key" value="recycleBinQueue" />
<!-- 设置消息的过期时间为7天(604800000毫秒) -->
<entry key="x-message-ttl" value="#{T(java.lang.Integer).parseInt('604800000')}" />
</rabbit:queue-arguments>
</rabbit:queue>
<!-- 回收站交换机 -->
<rabbit:direct-exchange name="recycleBinExchange">
<rabbit:bindings>
<!-- 将回收站队列绑定到回收站交换机 -->
<rabbit:binding queue="recycleBinDelayedQueue" key="recycleBinDelayedKey" />
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 消息监听容器 -->
<rabbit:listener-container connection-factory="connectionFactory">
<!-- 监听延时队列 -->
<rabbit:listener queues="recycleBinQueue" ref="recycleBinMessageListener" method="onMessage" />
</rabbit:listener-container>
<!-- 回收站消息监听器 -->
<bean id="recycleBinMessageListener" class="com.ruan.listener.RecycleBinMessageListener" />
</beans>
在spring-applicationcontext.xml中引入spring-rabbitmq.xml
<!-- rabbitMQ -->
<import resource="spring-rabbitmq.xml"></import>
消息接收者
public class RecycleBinMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
// 处理接收到的延时消息
String fileId = new String(message.getBody());
System.err.println(fileId);
// 删除回收站文件ID的逻辑
}
}
发送消息
rabbitTemplate.convertAndSend("recycleBinExchange","recycleBinDelayedKey",msg);