`

java Redis消息队列

 
阅读更多

maven依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>

两个包的版本可能会引起冲突(之前spring-data-redis版本是1.0.2),导致TOMCAT启动后报错。经过几次尝试,用这两个版本不会冲突,要注意。

 -------------------------------------------------------------------------------------------------------------------------------

配置文件:

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.2.xsd"
      default-lazy-init="true">

   <description>Jedis Configuration</description>

   <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
      <property name="maxIdle" value="50" /> <!-- 最大能够保持idel状态的对象数  -->
      <property name="maxTotal" value="1000" /> <!-- 最大分配的对象数 -->
      <property name="testOnBorrow" value="true" /> <!-- 当调用borrow Object方法时,是否进行有效性检查 -->
   </bean>
   
    <!-- spring date redis 配置 -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
   p:host-name="192.168.0.215" p:port="6379" p:password="123456"  p:pool-config-ref="jedisPoolConfig"/>  
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory"   ref="connectionFactory" />  
        <property name="keySerializer">
          <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
         </property>
         <property name="valueSerializer">
             <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
         </property>
    </bean> 
    
    <bean id="redisMessageListener" class="com.yooeee.web.redis.RedisMessageListener">  
        <property name="redisTemplate" ref="redisTemplate"/>  
    </bean> 
    
    <bean id="topicContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer" destroy-method="destroy">  
        <property name="connectionFactory" ref="connectionFactory"/>  
        <property name="taskExecutor">
            <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">  
                <property name="poolSize" value="3"></property>  
            </bean>  
        </property>  
        <property name="messageListeners">  
            <map>  
                <entry key-ref="redisMessageListener">  
                    <bean class="org.springframework.data.redis.listener.ChannelTopic">  
                        <constructor-arg value="order:topic"/>  
                    </bean>  
                </entry>  
            </map>  
        </property>  
    </bean>
   
   <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
      <constructor-arg index="0" ref="jedisPoolConfig" />
      <constructor-arg index="1" value="${redis.host}" />
      <constructor-arg index="2" value="${redis.port}" type="int" />
      <constructor-arg index="3" value="${redis.timeout}" type="int" />
      <constructor-arg index="4" value="${redis.requirepass}"/>
   </bean>
   
   <!--Redis service -这个是一个redis工具类,可以包含一些redis基本的操作。这里主要用的是publish方法->
   <bean id="redisService" class="com.yooeee.pj.business.service.cache.RedisService">
      <constructor-arg name="jedisPool" ref="jedisPool"/>
   </bean>
   
</beans>

----------------------------------------------------------------------------------------------------------------------------------

发送消息:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring-context-jedis.xml" })
public class RedisTopicTest {

   @Autowired
   private RedisTemplate<Serializable, Serializable> redisTemplate;


   @Test
   public void pub() {
      // 这里因为业务需要定义成map,一般可以定义为String,按照实际情况变通。orderMap.put("4499605762317320-9683121", "pRwImXJf");
      String channel = "order:topic";
      redisTemplate.convertAndSend(channel, orderMap);
      System.out.println("pub success...");
   }

}

 ---------------------------------------------------------------------------------------------------------------------------------

接收消息:

public class RedisMessageListener implements MessageListener {
   private static final Logger logger = LoggerFactory.getLogger(RedisMessageListener.class);
   private RedisTemplate<Serializable, Serializable> redisTemplate;

   public void setRedisTemplate(RedisTemplate<Serializable, Serializable> redisTemplate) {
      this.redisTemplate = redisTemplate;
   }

   @Overridepublic void onMessage(Message message, byte[] pattern) {
      // logger.warn("接收到订单提醒,开始提醒商户。");
      System.out.println("接收到订单提醒,开始提醒商户。");
      byte[] body = message.getBody();
      byte[] channel = message.getChannel();


      final Map<String,String> msgContent = (Map<String,String>) redisTemplate.getValueSerializer().deserialize(body);
      String topic = (String) redisTemplate.getStringSerializer().deserialize(channel);
      logger.warn("msgContent is : {},topic is : {}",msgContent,topic);
      System.out.println("收到消息为:" + msgContent );
   }
}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Java操作Redis消息队列案例(应用于Socket通信)

    redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合 redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    【微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单】这篇文章主要讲解了如何在微服务架构中使用SpringBoot整合Redis来构建一个基于Redis Stream的消息队列,以此来实现实时、高效的异步秒杀...

    Java利用Redis实现消息队列的示例代码

    Java利用Redis实现消息队列的示例代码 以下是Java利用Redis实现消息队列的示例代码的知识点总结: 一、序列化 * 序列化是将对象转换为byte数组的过程,Java中可以使用ByteArrayOutputStream和...

    基于Redis实现的延迟消息队列

    整个延迟队列由4个部分组成: 1. JobPool用来存放所有Job的元信息。 2. DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job Id)。 3. Timer负责实时扫描各个Bucket,并将delay...

    SpringBoot中利用Redis实现消息队列,代码亲测可用, 可以传输字符串,或java对象都可以

    SpringBoot中利用Redis实现消息队列,代码亲测可用, 可以传输字符串,或java对象都可以

    Java实现Redis的消息订阅和发布

    标签"redis队列"提示我们,Redis不仅仅可以作为发布/订阅系统,还可以用于构建消息队列,例如使用`RPOPLPUSH`或`BLPOP`命令实现先进先出(FIFO)队列。然而,对于大型高并发系统,可能需要考虑使用Redis的Stream或更...

    java redis使用之利用jedis实现redis消息队列.docx

    ### Java Redis 使用之利用 Jedis 实现 Redis 消息队列 #### 一、引言 随着互联网应用的发展,消息队列在系统架构中的地位愈发重要。它不仅可以提高系统的响应速度,还可以帮助开发者构建出更加健壮、可扩展的应用...

    基于redis实现的消息队列

    标题中的“基于redis实现的消息队列”指的是使用Redis这一开源数据结构存储系统来构建消息队列(Message Queue, MQ)的解决方案。Redis以其高性能、丰富的数据结构和内存存储特性,常被用作构建消息队列的底层技术。...

    java抽奖系统后台 springboot+mybatis redis队列处理高并发.zip

    在本项目中,"java抽奖系统后台 springboot+mybatis redis队列处理高并发.zip",我们可以探索几个关键的IT技术及其在构建高效抽奖系统中的应用。以下是对这些技术的详细说明: 1. **SpringBoot**: SpringBoot是...

    DelayQueue延迟队列和Redis缓存实现订单自动取消功能

    Redis是一个高性能的键值数据库,常用于缓存和消息代理。在上述场景中,我们可以利用Redis的过期机制来进一步确保订单的自动取消。将订单信息存储为Redis中的键值对,设置键的过期时间与订单的超时时间一致。当订单...

    java redis 各类型操作实例

    在Java开发中,Redis是一个非常流行的高性能键值存储系统,常用于缓存、消息队列等场景。本文将深入探讨如何使用Java与Redis进行各种类型的操作,并基于Maven项目管理来构建我们的示例代码。 首先,为了在Java项目...

    SpringBoot利用redis集成消息队列的方法

    其次,需要创建消息接收者,用于接收从Redis队列中推送的消息。在这里,我们可以使用Autowired注解来消除set和get方法的使用,例如: ``` @Autowired public Receiver(CountDownLatch latch) { this.latch = latch;...

    基于Redis队列的Java消息队列设计源码

    该项目是一款基于Redis队列技术的Java消息队列设计源码,集成了21个文件,其中包含17个Java源文件、1个LICENSE文件、1个Markdown文件、1个XML配置文件。该系统旨在通过Redis队列实现高效的消息队列管理,适用于需要...

    redis实现延迟消息队列

    基于Redis实现的延迟消息队列java版:delay-queue 整体结构 整个延迟队列由4个部分组成: JobPool用来存放所有Job的元信息。 DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job...

    java redis增删改查样例

    Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列、计数器等多种场景。在Java中操作Redis,我们通常会借助于一些客户端库,如Jedis、Lettuce等。本示例将重点讲解如何使用Java与Redis进行基本的增删改...

    redis延时队列.zip

    Redis延时队列是一种在Redis数据库中实现的特殊队列,它允许我们存储消息并在未来某个特定时间点处理这些消息。这种功能对于处理定时任务、延迟通知、订单超时等场景非常有用。在这个"redis延时队列.zip"压缩包中,...

    PHP+Redis 的队列处理程序

    在这个项目中,PHP脚本将扮演生产者的角色,将任务或事件作为消息推入Redis队列。另一方面,另一组PHP脚本或者服务作为消费者,从队列中取出并执行这些任务。 Redis中的列表数据类型可以完美地作为队列来使用。`...

    java-redis jar

    Redis是一款高性能的键值存储系统,常用于数据缓存、消息队列等场景,而Java作为广泛使用的编程语言,通过特定的客户端库可以方便地与Redis进行通信。在Spring框架中,我们可以利用其强大的依赖注入和面向切面编程...

Global site tag (gtag.js) - Google Analytics