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 ); } }
相关推荐
redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合 redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合
【微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单】这篇文章主要讲解了如何在微服务架构中使用SpringBoot整合Redis来构建一个基于Redis Stream的消息队列,以此来实现实时、高效的异步秒杀...
Java利用Redis实现消息队列的示例代码 以下是Java利用Redis实现消息队列的示例代码的知识点总结: 一、序列化 * 序列化是将对象转换为byte数组的过程,Java中可以使用ByteArrayOutputStream和...
整个延迟队列由4个部分组成: 1. JobPool用来存放所有Job的元信息。 2. DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job Id)。 3. Timer负责实时扫描各个Bucket,并将delay...
SpringBoot中利用Redis实现消息队列,代码亲测可用, 可以传输字符串,或java对象都可以
标签"redis队列"提示我们,Redis不仅仅可以作为发布/订阅系统,还可以用于构建消息队列,例如使用`RPOPLPUSH`或`BLPOP`命令实现先进先出(FIFO)队列。然而,对于大型高并发系统,可能需要考虑使用Redis的Stream或更...
### Java Redis 使用之利用 Jedis 实现 Redis 消息队列 #### 一、引言 随着互联网应用的发展,消息队列在系统架构中的地位愈发重要。它不仅可以提高系统的响应速度,还可以帮助开发者构建出更加健壮、可扩展的应用...
标题中的“基于redis实现的消息队列”指的是使用Redis这一开源数据结构存储系统来构建消息队列(Message Queue, MQ)的解决方案。Redis以其高性能、丰富的数据结构和内存存储特性,常被用作构建消息队列的底层技术。...
在本项目中,"java抽奖系统后台 springboot+mybatis redis队列处理高并发.zip",我们可以探索几个关键的IT技术及其在构建高效抽奖系统中的应用。以下是对这些技术的详细说明: 1. **SpringBoot**: SpringBoot是...
Redis是一个高性能的键值数据库,常用于缓存和消息代理。在上述场景中,我们可以利用Redis的过期机制来进一步确保订单的自动取消。将订单信息存储为Redis中的键值对,设置键的过期时间与订单的超时时间一致。当订单...
在Java开发中,Redis是一个非常流行的高性能键值存储系统,常用于缓存、消息队列等场景。本文将深入探讨如何使用Java与Redis进行各种类型的操作,并基于Maven项目管理来构建我们的示例代码。 首先,为了在Java项目...
其次,需要创建消息接收者,用于接收从Redis队列中推送的消息。在这里,我们可以使用Autowired注解来消除set和get方法的使用,例如: ``` @Autowired public Receiver(CountDownLatch latch) { this.latch = latch;...
该项目是一款基于Redis队列技术的Java消息队列设计源码,集成了21个文件,其中包含17个Java源文件、1个LICENSE文件、1个Markdown文件、1个XML配置文件。该系统旨在通过Redis队列实现高效的消息队列管理,适用于需要...
基于Redis实现的延迟消息队列java版:delay-queue 整体结构 整个延迟队列由4个部分组成: JobPool用来存放所有Job的元信息。 DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job...
Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列、计数器等多种场景。在Java中操作Redis,我们通常会借助于一些客户端库,如Jedis、Lettuce等。本示例将重点讲解如何使用Java与Redis进行基本的增删改...
Redis延时队列是一种在Redis数据库中实现的特殊队列,它允许我们存储消息并在未来某个特定时间点处理这些消息。这种功能对于处理定时任务、延迟通知、订单超时等场景非常有用。在这个"redis延时队列.zip"压缩包中,...
在这个项目中,PHP脚本将扮演生产者的角色,将任务或事件作为消息推入Redis队列。另一方面,另一组PHP脚本或者服务作为消费者,从队列中取出并执行这些任务。 Redis中的列表数据类型可以完美地作为队列来使用。`...
Redis是一款高性能的键值存储系统,常用于数据缓存、消息队列等场景,而Java作为广泛使用的编程语言,通过特定的客户端库可以方便地与Redis进行通信。在Spring框架中,我们可以利用其强大的依赖注入和面向切面编程...