1,application.properties配置redis以及连接池
#redis spring.redis.host=localhost spring.redis.port=6379
#spring.redis.password= spring.redis.database=1 spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=500 spring.redis.pool
.min-idle=0 spring.redis.timeout=0
2,消息发布者、消息处理者POJO、redis消息监听器容器以及redis监听器注入IOC容器

* redis configuration @Configuration //相当于xml中的beans public class RedisConfig
{ /** * redis消息监听器容器 * 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器 *
通过反射技术调用消息订阅处理器的相关方法进行一些业务处理 * @param connectionFactory * @param
listenerAdapter * @return */ @Bean //相当于xml中的bean RedisMessageListenerContainer
container(RedisConnectionFactory connectionFactory, MessageListenerAdapter
listenerAdapter) { RedisMessageListenerContainer container =new
RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);//订阅了一个叫chat 的通道
container.addMessageListener(listenerAdapter,new PatternTopic("chat"));
//这个container 可以添加多个 messageListener return container; } /** *
消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法 * @param receiver * @return */ @Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {//这个地方
是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
//也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看 return new
MessageListenerAdapter(receiver,"receiveMessage"); } /**redis 读取内容的template */
@Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory); } }

MessageListenerAdapter通过反射使普通的POJO就可以处理消息。具体情况见MessageListenerAdapter的onMessage方法。

3,消息发布者
@EnableScheduling //开启定时器功能 @Component public class MessageSender { @Autowired
private StringRedisTemplate stringRedisTemplate; @Scheduled(fixedRate = 2000)
//间隔2s 通过StringRedisTemplate对象向redis消息队列chat频道发布消息 public void sendMessage(){
stringRedisTemplate.convertAndSend("chat",String.valueOf(Math.random())); } }
4,普通的消息处理器POJO
@Component public class MessageReceiver { /**接收消息的方法*/ public void
receiveMessage(String message){ System.out.println("收到一条消息:"+message); } }
MessageListenerAdapter通过反射调用receiveMessage方法处理消息

5,pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns=
"http://maven.apache.org/POM/4.0.0" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
> <modelVersion>4.0.0</modelVersion> <groupId>com.learn</groupId>
<artifactId>springboot-redis-message-pubsub-demo</artifactId> <version>0.0.1
-SNAPSHOT</version> <packaging>jar</packaging>
<name>springboot-redis-message-pubsub-demo</name> <description>Demo projectfor
Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10
.RELEASE</version> <relativePath/> <!-- lookup parent from repository -->
</parent> <properties> <project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8
</project.reporting.outputEncoding> <java.version>1.8</java.version>
</properties> <dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId> </dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
</dependencies> <build> <plugins> <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
</project>
github代码 <https://github.com/mapcme/springboot-redis-message-pubsub-demo>

参考资料:

1,《Spring AMQP 源码分析 07 - MessageListenerAdapter
<https://www.cnblogs.com/gordonkong/p/7201898.html>》

2,《Spring整合JMS(二)——三种消息监听器 <http://elim.iteye.com/blog/1893676>》

3,《redis 消息队列发布订阅模式spring boot实现
<http://blog.csdn.net/wuxuyang_7788/article/details/78004897>》

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信