前提是你已经有一个可运行的redis的demo,直接上核心redis配置文件:
<!-- redis服务配置 开始-->
<bean class="redis.clients.jedis.JedisPoolConfig" id="poolConfig">
<property name="maxTotal" value="${redis.maxTotal}">
<property name="minIdle" value="${redis.minIdle}">
<property name="maxWaitMillis" value="${redis.maxWaitTime}">
<property name="maxIdle" value="${redis.maxIdle}">
<property name="testOnBorrow" value="${redis.testOnBorrow}">
<property name="testOnReturn" value="true">
<property name="testWhileIdle" value="true">
</bean>
<bean class="org.springframework.data.redis.connection.RedisSentinelConfiguration" id="sentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="${redis.sentinel.masterName}"></property>
</bean>
</property>
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinel1.host}"></constructor-arg>
<constructor-arg name="port" value="${redis.sentinel1.port}"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinel2.host}"></constructor-arg>
<constructor-arg name="port" value="${redis.sentinel2.port}"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinel3.host}"></constructor-arg>
<constructor-arg name="port" value="${redis.sentinel3.port}"></constructor-arg>
</bean>
</set>
</property>
</bean>
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" id="connectionFactory" p:password="${redis.sentinel.password}">
<constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg>
<constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>
<property name="database" value="${redis.database}">
</property></bean>
<bean class="org.springframework.data.redis.core.RedisTemplate" id="redisTemplate">
<property name="connectionFactory" ref="connectionFactory">
</property></bean>
<bean class="com.hthl.xxtd.service.redis.RedisService" id="redisService">
<property name="redisTemplate" ref="redisTemplate"></property>
</bean>
<!-- 对象序列化方式 -->
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" id="jdkSerializer">
<!-- 配置监听器,redis在订阅消息时,会根据 redis:listener标签指定的方法名和通道(topic)调用不同的方法-->
<bean class="com.hthl.xxtd.web.listen.RedisMessageListenerContainer" id="redisMsgListener">
<redis:listener-container connection-factory="connectionFactory">
<!-- topic代表监听的通道,是一个正则匹配 -->
<redis:listener method="sendEmail" ref="redisMsgListener" serializer="jdkSerializer" topic="hthl_email">
</redis:listener></redis:listener-container>
<!-- redis服务配置 结束 -->
</bean>
</bean>
消息生产者:
import java.io.Serializable;
import org.springframework.data.redis.core.RedisTemplate;
import com.hthl.xxtd.model.email.EmailRecord;
/**
*
* @see
* @date
* @version
* @desc 消息发布者
*/
public class RedisService {
private RedisTemplate<serializable, serializable=""> redisTemplate;
/**
* 发布者:发送邮件
* */
public void sendEmail(EmailRecord emailRecord){
redisTemplate.convertAndSend("hthl_email",emailRecord);
}
}
消费者:
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import com.hthl.xxtd.model.email.EmailRecord;
import com.hthl.xxtd.service.email.EmailChannelService;
import net.sf.json.JSONObject;
/**
* 订阅者
* */
public class RedisMessageListenerContainer{
private static final Logger logger = Logger.getLogger(RedisMessageListenerContainer.class);
@Resource
private EmailChannelService emailChannelService;
//发送邮件
public void sendEmail(EmailRecord emailRecord, String channel) {
//do something
logger.info("订阅者"+channel+"收到邮件:"+ JSONObject.fromObject(emailRecord).toString());
}
}
扩展:这里可设置多个频道,,消费者亦可根据不同channel筛选订阅