标签:
Spring-data-redis配置 订阅/发布 功能
一、添加maven依赖
<!-- redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.5.0.RELEASE</version> <scope>provided</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> <scope>provided</scope> </dependency> <!-- redis -->
二、redis.properties
##applicationContext-redis.xml redis.ip=192.168.1.156 redis.port=6379 redis.timeout=5000 redis.maxIdle=10 redis.minIdle=1 redis.maxTotal=30 redis.maxWaitMillis=5000 #testOnBorrow true 指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 redis.testOnBorrow=true
三、applicationContext-redis-pub-sub-demo.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:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns:util="http://www.springframework.org/schema/util" xmlns:redis="http://www.springframework.org/schema/redis"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/redis
http://www.springframework.org/schema/redis/spring-redis-1.0.xsd"
default-lazy-init="true">
<description>redis 发布 定阅 示例</description>
<context:property-placeholder location="classpath*:redis.properties" />
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}" />
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="minIdle" value="${redis.minIdle}" />
<property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.ip}" />
<property name="port" value="${redis.port}" />
<property name="timeout" value="${redis.timeout}" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
<bean id="listener" class="cn.com.easy.redis.RedisMessageListenerService" />
<redis:listener-container connection-factory="jedisConnectionFactory">
<!-- the method attribute can be skipped as the default method name is
"handleMessage" -->
<!-- topic代表监听的通道,是一个正规匹配 -->
<redis:listener ref="listener" method="handleMessage"
topic="*" />
</redis:listener-container>
</beans>
四、接收端 RedisMessageListenerService.java
package cn.com.easy.redis;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 订阅服务类
*
* @author nibili 2015年5月14日
*
*/
public class RedisMessageListenerService {
@SuppressWarnings("resource")
public static void main(String[] args) {
new ClassPathXmlApplicationContext("/applicationContext-redis-pub-sub-demo.xml");
while (true) { // 这里是一个死循环,目的就是让进程不退出,用于接收发布的消息
try {
System.out.println("current time: " + new Date());
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void handleMessage(Serializable message) {
// 什么都不做,只输出
if (message == null) {
System.out.println("null");
} else if (message.getClass().isArray()) {
System.out.println(Arrays.toString((Object[]) message));
} else if (message instanceof List<?>) {
System.out.println(message);
} else if (message instanceof Map<?, ?>) {
System.out.println(message);
} else {
System.out.println(ToStringBuilder.reflectionToString(message));
}
}
}
五、发送端
package cn.com.easy.redis;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* 发布消息测试
*
* @author nibili 2015年5月14日
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext-redis-demo.xml")
public class RedisPubTest {
@Resource(name = "redisTemplate")
private RedisTemplate<String, String> template;
/**
* 发布消息
*
* @auth nibili 2015年5月14日
*/
@Test
public void pub() {
template.convertAndSend("java", "java我发布的消息!");
}
}
标签:
原文地址:http://my.oschina.net/u/1045177/blog/414654