配置环境

版本信息:

Spring 4.2.8.RELEASE(其中囊括tx、webmvc、context、aop之类的)
Spring-data-jpa 1.10.5.RELEASE
Spring-data-redis 1.8.0.RELEASE
Spring-data-commons 1.12.5.RELEASE
MySQL 5.7
JDK 1.8

Maven依赖:

<!-- spring begin --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.2.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.2.8.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.8.9</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.10.5.RELEASE</version></dependency><!-- spring end --><!-- redis start--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.0.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><!--redis end-->

ApplicationContext.xml 配置

这里就只添加 Redis 相关的信息了。

<!-- 事务管理器 --><bean id="MytransactionManager"          class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="MyentityManagerFactory" /><property name="dataSource" ref="MydataSource"/></bean><!-- 注解式事务 --><tx:annotation-driven transaction-manager="MytransactionManager" /><!--MessageQueue Start--><bean id="MQConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"p:hostName="127.0.0.1" p:port="6379" p:password="password" p:usePool="true"></bean><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"p:connectionFactory-ref="MQConnectionFactory"/><!--JDK序列化工具--><bean id="Serialization" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /><!--文本序列化工具--><bean id="Stringserialization" class="org.springframework.data.redis.serializer.StringRedisSerializer" /><!--订阅者--><bean id="Listener" class="com.MuNineyi.messagequeue.Listener"/><!--订阅者适配器--><bean id="MessageListenerAdapter" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter"><property name="serializer" ref="Serialization" /><property name="stringSerializer" ref="Stringserialization"/><property name="delegate" ref="Listener" /> <!--订阅者/目的地--><property name="defaultListenerMethod" value="receiveMessage"/> <!--默认接收方法--></bean><!--channelPattern 通道设置器,这里和老版本是不同的--><bean id="Topic" class="org.springframework.data.redis.listener.PatternTopic" beans:pattern="identity"/><!--装箱,这里和老版本是不同的--><bean id="RedisMessageListenerContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer"><property name="connectionFactory" ref="MQConnectionFactory"/><property name="topicSerializer" ref="Stringserialization"/> <!--通道序列化--><property name="messageListeners"><map key-type="org.springframework.data.redis.connection.MessageListener" value-type="org.springframework.data.redis.listener.PatternTopic"><entry key-ref="MessageListenerAdapter"  value-ref="Topic"/></map></property></bean><!--MessageQueue End-->

代码实现

消息传递类(消息实体)

public class Message{private String name;private String age;private String liveCity;//相关的 get、set 方法
}

Sender 发送者

这里可以写成接口的形式,方便调用

@Service("Service")
public class Sender{@Qualifier(value = "redisTemplate")private RedisTemplate redisTemplate;public void sendMessage(String channel, Serializable message) {redisTemplate.convertAndSend(channel, message);}public RedisTemplate getRedisTemplate() {return redisTemplate;}public void setRedisTemplate(RedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}public void getInformationFromOtherAPI(String name, String age, String liveCity) throws InterruptedException {Message message = new Message();message.setName(name);message.setAge(age);message.setLiveCity(liveCity);sendMessage("identity ", message);}
}

Listener 订阅者

@Service("Listener")
public class Listener{@Autowiredprivate MiddleService middleService;/*** 订阅者* @param message*/public void receiveMessage(Serializable message) {if (message instanceof Message){Message message = (Message) message;System.out.println(message.getName()+message.getAge()+message.getLiveCity());}}
}

简单的代码实现已经完成了

调用 getInformationFromOtherAPI(), 就可以实现将信息填入消息队列中。

下一篇会说一下由于JPA提交事务慢,导致消息队列找不到刚提交到数据库的信息的问题。

Spring Spring-data-redis 实现的消息队列相关推荐

  1. 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?

    GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...

  2. 面试官竟让我用Redis实现一个消息队列!

    来自公众号:Hollis >>>千人线上直播活动报名倒计时(今晚20:00): 从Oracle出发,走进GaussDB的世界 众所周知,redis是一个高性能的分布式key-valu ...

  3. thinkphp 实现redis简单的消息队列

    thinkphp 实现redis简单的消息队列 本章简单的实现.消息队列的入列和出列 1.入列,入列作为生产者,只管尽情的成产即可,无需考虑其他 (秒杀.抢购场景除外). 此次我们假如有十个用户进入队 ...

  4. redis延迟消息队列不准时php,Redis实现延迟消息队列

    消息队列是应用中常用的一个技术点,通常我们可以借助消息队列中间件来实现,但是并不是所有的情况下,都需要使用到MQ. 如果只需要实现简单的消息队列,那么借助Redis即可. 如果对消息有着严格的可靠性等 ...

  5. 使用 Redis Stream 实现消息队列

    使用 Redis Stream 实现消息队列 Intro Redis 5.0 中增加了 Stream 的支持,利用 Stream 我们可以实现可靠的消息队列,并且支持一个消息被多个消费者所消费,可以很 ...

  6. redis简单队列java_使用Redis的简单消息队列

    redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...

  7. 使用Redis的简单消息队列

    在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medium和Large. 在第一个 ...

  8. redis 消息队列 过段时间不能下发_以Redis来谈消息队列

    首先 我先引入一个大家熟知的观点:Reids可以作为消息队列来使用 redis提供了两种方式来做消息队列,一种是生产者消费者模式,一种是发布订阅模式. 本篇文章将从 异步,解耦,分布式,可靠四部分来探 ...

  9. redis stream 实现消息队列

    redis stream 实现消息队列 Redis5.0带来了Stream类型.从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现. 基于r ...

  10. redis list 实现消息队列 多线程消费

    redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 redis list 实现消息队列 多线程消费 利用redis list 命令: Redis Brpop ...

最新文章

  1. 从Linux内核中获取真随机数【转】
  2. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
  3. LeetCode Range Sum Query - Mutable(树状数组、线段树)
  4. 企业架构:现代数据架构的特征
  5. [转] ios学习--openURL的使用方法
  6. sublime_text快捷键
  7. OSPF passive-interface
  8. 新版微信不停跳转到小程序_微信又有大动作,小程序跳转功能将受限?
  9. 【BZOJ1124】[POI2008]枪战Maf(基环树_构造)
  10. Your port 80 is actually used by : Server: Microsoft-IIS/10.0 Cannot install the Apache service, p
  11. 形态学图像处理之边界提取与跟踪
  12. 网络安全防护体系建设
  13. 人脸识别系统技术方案
  14. 《最伟大的作品》,解密周杰伦新专辑背后的数据密码
  15. Navicat 快捷键说明
  16. 小米三季报:手机不振,汽车加码
  17. 形容人的内核是什么意思_气场: 一个人的精神内核
  18. 低功耗 WIFI 门铃在微信小程序中的应用实现(Hi3518EV200+Hi1131s+MCU+LiteOS)
  19. [Extensive Reading]background modeling:MOG2
  20. java 引用其他类_java如何调用其他类中的方法?

热门文章

  1. 日语中的“上手”“下手”是什么意思?
  2. 微软测试管理框架(Microsoft Test Manager)
  3. IEEE格式如何使用在线参考文献生成器
  4. lzw编码c语言,LZW字典压缩算法的实现
  5. 林群、张景中院士近年来致力于微积分局部公理化,此路不通
  6. c语言随机生成字母,C语言编程实战案例——6位密码随机生成器
  7. 设计模式实例php,PHP三种设计模式实例教程
  8. java中判断字符是否为英文字母、中文汉字或者数字
  9. 【Unity】Jay 开发日志(六)——暂停和结束菜单的创建
  10. 110.Balanced Binary Tree