多个项目之间的消息传送,注意保证多个项目中监听,传送消息的实体路径保持一致,例如:cn.com.send.xxx
spring-session-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/redis
http://www.springframework.org/schema/redis/spring-redis-1.0.xsd">
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="600" />
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="100" />
<property name="maxIdle" value="10" />
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
destroy-method="destroy">
<property name="hostName" value="${redis_hostname}" />
<property name="port" value="${redis_port}" />
<property name="password" value="${redis_pwd}" />
<property name="timeout" value="3000" />
<property name="usePool" value="true" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>
<!-- redis 消息队列配置 -->
<bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"></property>
<!-- 连接redis -->
</bean>
<bean id="jdkSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
<bean id="messageListener"
class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="messageDelegateListener" />
<!-- 监听类(ref指向类名称) -->
<property name="serializer" ref="jdkSerializer" />
</bean>
<bean id="testMessageListener"
class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="testMessageDelegateListener" />
<!--
监听类(ref指向类名称)
-->
<property name="serializer" ref="jdkSerializer" />
</bean>
<bean id="sendMessage" class="com.wavenet.message.SendMessage"> <!-- 发送消息的类,存储消息 -->
<property name="redisTemplate" ref="jedisTemplate" />
</bean>
<redis:listener-container connection-factory="jedisConnectionFactory">
<redis:listener ref="messageListener" method="handleMessage"
serializer="jdkSerializer" topic="sms_queue_web_online" />
<!-- 保存的key值(topic),放值得时候放到这个key中,取的时候从这里面取 -->
<redis:listener ref="testMessageListener" method="handleMessage"
serializer="jdkSerializer" topic="sms_queue_web_online" /> <!-- -->
</redis:listener-container>
</beans>
SendMessage.java
/*
* @Project: water_rcs
* @Title SendMessage.java
* @Package com.wavenet.rcs.service
* @Description: TODO(用一句话描述该文件做什么)
* @date 2017年6月6日 下午8:27:57
* @version V1.0
*/
package com.wavenet.message;
import java.io.Serializable;
import org.springframework.data.redis.core.RedisTemplate;
/**
* @ClassName: SendMessage
* @Description: TODO(这里用一句话描述这个类的作用)
* @author ShangXW
* @date 2017年6月6日 下午8:27:57
*
*/
public class SendMessage {
private RedisTemplate<String, Object> redisTemplate;
public RedisTemplate<String, Object> getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
}
}
监听类
MessageDelegateListener.java
/*
* @Project: water_rcs
* @Title SmsMessageDelegateListener.java
* @Package com.wavenet.rcs.service
* @Description: TODO(用一句话描述该文件做什么)
* @date 2017年6月6日 下午8:28:50
* @version V1.0
*/
package com.wavenet.message;
import java.io.Serializable;
import org.springframework.stereotype.Component;
/**
* @ClassName: SmsMessageDelegateListener
* @Description: TODO(这里用一句话描述这个类的作用)
* @author ShangXW
* @date 2017年6月6日 下午8:28:50
*
*/
@Component
public class MessageDelegateListener {
//监听Redis消息
public void handleMessage(Serializable message){
System.out.println("messageVo="+message);
if(message instanceof MessageVo){
MessageVo messageVo = (MessageVo) message;
System.out.println("我是第一个取到到=="+messageVo.getHotLinesn());
}
}
}
存放消息的对象MessageVo.java
/*
* @Project: water_rcs
* @Title SmsMessageVo.java
* @Package com.wavenet.rcs.service
* @Description: TODO(用一句话描述该文件做什么)
* @date 2017年6月6日 下午8:26:36
* @version V1.0
*/
package com.wavenet.message;
import java.io.Serializable;
import java.util.Date;
/**
* @ClassName: SmsMessageVo
* @Description: TODO(这里用一句话描述这个类的作用)
* @author ShangXW
* @date 2017年6月6日 下午8:26:36
*
*/
public class MessageVo implements Serializable {
/**
* @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
*/
private static final long serialVersionUID = -6524339155188136859L;
//id
private Integer smsId;
//手机号
private String mobile;
//类型,1:验证码 2:订单通知
private Byte type;
//短信创建时间
private Date createDate;
//短信消息处理时间
private Date processTime;
//短信状态,1:未发送 2:发送成功 3:发送失败
private Byte status;
//短信内容
private String content;
//上报事件id
private String hotLinesn;
/**
* @return the hotLinesn
*/
public String getHotLinesn() {
return hotLinesn;
}
/**
* @param hotLinesn the hotLinesn to set
*/
public void setHotLinesn(String hotLinesn) {
this.hotLinesn = hotLinesn;
}
/**
* @return the smsId
*/
public Integer getSmsId() {
return smsId;
}
/**
* @param smsId the smsId to set
*/
public void setSmsId(Integer smsId) {
this.smsId = smsId;
}
/**
* @return the mobile
*/
public String getMobile() {
return mobile;
}
/**
* @param mobile the mobile to set
*/
public void setMobile(String mobile) {
this.mobile = mobile;
}
/**
* @return the type
*/
public Byte getType() {
return type;
}
/**
* @param type the type to set
*/
public void setType(Byte type) {
this.type = type;
}
/**
* @return the createDate
*/
public Date getCreateDate() {
return createDate;
}
/**
* @param createDate the createDate to set
*/
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
/**
* @return the processTime
*/
public Date getProcessTime() {
return processTime;
}
/**
* @param processTime the processTime to set
*/
public void setProcessTime(Date processTime) {
this.processTime = processTime;
}
/**
* @return the status
*/
public Byte getStatus() {
return status;
}
/**
* @param status the status to set
*/
public void setStatus(Byte status) {
this.status = status;
}
/**
* @return the content
*/
public String getContent() {
return content;
}
/**
* @param content the content to set
*/
public void setContent(String content) {
this.content = content;
}
//省略setter和getter方法
}
存放消息的方法
@Autowired
SendMessage sendMessage;
public String testFangfa(String ss){
MessageVo mVo = new MessageVo();
mVo.setContent("121212");
mVo.setSmsId(1);
mVo.setHotLinesn(ss);
mVo.setSmsId(1);
sendMessage.sendMessage("sms_queue_web_online", mVo);
return "success";
}
pom.xml
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>