redis 多个项目之间消息队列传递

来源:互联网 发布:淘宝促销活动海报 编辑:程序博客网 时间:2024/06/05 09:28
多个项目之间的消息传送,注意保证多个项目中监听,传送消息的实体路径保持一致,例如: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>

原创粉丝点击