Spring Spring-data-redis 实现的消息队列
来源:互联网 发布:在线学编程的网站 编辑:程序博客网 时间:2024/05/29 10:53
配置环境
版本信息:
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{ @Autowired private 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提交事务慢,导致消息队列找不到刚提交到数据库的信息的问题。
阅读全文
0 0
- Spring Spring-data-redis 实现的消息队列
- spring-data-redis队列
- Spring-data-redis: 分布式队列
- Spring-data-redis: 分布式队列
- Spring-data-redis: 分布式队列
- redis 消息队列发布订阅模式spring boot实现
- Spring Data+Redis缓存实现
- Spring-data-redis: pub/sub消息订阅
- Spring-data-redis: pub/sub消息订阅
- redis实现 spring-redis-data初学习
- redis实现 spring-redis-data初学习
- redis实现 spring-redis-data初学习
- redis实现 spring-redis-data,存取对象
- redis实现 spring-redis-data初学习
- redis实现 spring-redis-data初学习
- redis实现 spring-redis-data初学习
- Spring中spring-data-redis的使用
- redis:spring-data-redis
- 【2017】五月份英语学习总结
- 遍历一个布局里面所有的控件
- 王家林老师大数据视频学习地址
- 列对象+创建对象类型+使用对象类型定义表中的列/DML操作
- Android—java实现apk的静默安装、普通安装
- Spring Spring-data-redis 实现的消息队列
- Javaee -----01----javaee的环境搭建和html标签
- Hinton神经网络公开课编程题2--神经概率语言模型(NNLM)
- Transformation
- smarty待续
- 机房收费系统之一(如何学习)
- 三步解决android studio 工程上传不到github
- 把jdbc又翻看了一遍,感觉竟然还收获颇丰
- eclipse中如何创建带文件头的xml文件