通常情况下,为了提高系统开发的灵活性和可维护度,我们会采用消息队列队系统进行解耦。下面是一个采用spring redis实现的消息队列实例,但此实例会由于网络延迟和阻塞等情况导致消息处理的延时,因而不能确保消息处理的顺序,所以使用时需要注意。
<jedis.version>2.8.1</jedis.version>
<spring-data-redis.version>1.7.2.RELEASE</spring-data-redis.version>
<commons-pool2.version>2.2</commons-pool2.version>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${spring-data-redis.version}</version>
redis.test_on_borrow=true
redis.test_on_return=true
applicationContext.xml中添加如下配置:
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.max_idle}" />
<property name="maxTotal" value="${redis.max_total}"/>
<property name="minIdle" value="${redis.min_idle}"/>
<property name="testOnBorrow" value="${redis.test_on_borrow}" />
<property name="testOnReturn" value="${redis.test_on_return}"/>
<!-- Jedis ConnectionFactory 数据库连接配置,注意id名称必须为redisConnectionFactory-->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.host}" />
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.password}" />
<property name="poolConfig" ref="jedisPoolConfig" />
public class SendMessage {
private RedisTemplate<String, Object> redisTemplate;
public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
public class ListenMessage {
public void handleMessage(Serializable message){
System.out.println(message);
@RequestMapping(value = "/queue")
public class QueueController {
@RequestMapping(value="/redis")
for (int i = 0; i <1000; i++) {
sendMessage.sendMessage("java",i);
新建applicationContext-redis.xml,内容如下:
<?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:redis="http://www.springframework.org/schema/redis"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd">
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="redisConnectionFactory"/>
<bean id="jdkSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
<bean id="messageDelegateListener" class="com.quartz.task.core.queue.ListenMessage"/>
<bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="messageDelegateListener"/>
<property name="serializer" ref="jdkSerializer" />
<redis:listener-container>
<!--指定消息处理方法,序列化方式及主题名称-->
<redis:listener ref="messageListener" method="handleMessage" serializer="jdkSerializer" topic="java"/>
</redis:listener-container>
│ │ │ QueueController.java
│ │ │ │ ListenMessage.java
│ │ applicationContext-redis.xml
│ │ applicationContext.xml
│ │ springMVC-context.xml
│ │ system-config.properties
│ index.jsp
本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/5889867.html,如需转载请自行联系原作者