spring boot redis 发布订阅,java redis消息订阅与发布

  spring boot redis 发布订阅,java redis消息订阅与发布

  00-1010 1.什么是redis发布和订阅2。Redis出版和订阅。命令行实现函数订阅主题模式匹配订阅发布消息退订测试4。SpringBoot实现功能Springboot集成Redis配置消息监控测试

  00-1010官网的文档介绍里有一行:Redis是一个快速稳定的发布/订阅消息系统。

  00-1010机制

  Redis提供发布和订阅功能,可用于消息传输。Redis的发布和订阅机制包括三个部分:发布者、订阅者和通道(主题或队列)。

  

目录

 

  

1.什么是redis的发布与订阅

Redis使用SUBSCRIBE channel命令订阅主题。返回的参数subscribe表示主题已经成功订阅,第二个参数表示订阅的主题名称,第三个参数表示当前的订阅号。

 

  127.0.0.1:6379订购支付成功阅读消息.(按Ctrl-C退出)1)订阅 2)下单-支付-成功 3)(整数)1

  00-1010模式匹配功能允许客户端伪订阅与特定模式匹配的通道。Redis通过使用subscription channel命令订阅所有匹配特定模式的通道。该模式用*表示,可以用任何值替换。

  127 . 0 . 0 . 1:6379 PSU订阅订单-支付-*阅读消息.(按Ctrl-C退出)1) PSU subscribe 2) ORDER-PAY-* 3)(整数)1

  

2.Redis发布订阅

Redis使用发布通道消息命令发布关于某个主题的消息,返回的参数是收到消息的订阅者数量。

 

  127.0.0.1:6379发布订单支付成功DD202109071525(整数)1

  

3.命令行实现功能

Redis使用UNSUBSCRIBE channel或PUNSUBSCRIBE channel命令取消某个话题的订阅。因为Redis的订阅操作是阻塞的,一旦客户端订阅了某个频道或模式,就会一直停留在订阅状态,直到退出。在subscribe、SUBSCRIBE、UNSUBSCRIBE和PUNSUBSCRIBE命令中,返回值都包含客户端当前订阅的频道和模式的数量。当该数字变为0时,客户端将自动退出订阅状态。

 

  127.0.0.1:6379退订订单-支付-成功1)退订 2)订单-支付-成功 3)(整数)0127 . 0 . 0 . 1:6379 punsuble订单-支付-成功1) punsuble 2)订单-支付-成功 3)(整数)0

  00-1010首先,三个订户订阅订单支付成功主题。当发送者在此主题内发送订单号时,所有订阅者都将收到此主题的消息。

  

订阅主题

 

  00-1010相关性包介绍

  依赖性依赖性groupIdorg.springframework.boot/groupId artifactId spring-boot-starter/artifactId version2.2.10.RELEASE/version/depende

  ncy> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.4.1</version> </dependency> </dependencies>配置yaml文件

  

server:  port: 8888spring:  application:    name: spring-boot-redis  redis:    host: 127.0.0.1    port: 6379

 

  

配置消息监听

import com.demo.redis.listener.MessageListener;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.listener.PatternTopic;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;/** * @author Bai * @date 2021/4/29 上午 11:17 * @description */@Configurationpublic class RedisMessageConfig {    /**     * 监听订单支付完成主题     */    private static final String ORDER_PAY_SUCCESS = "ORDER-PAY-SUCCESS";    /**     * 注入消息监听适配器     * @param messageListener     * @return {@link MessageListenerAdapter}     * @throws     * @author Bai     * @date 2021/9/7 下午 03:54     */    @Bean    public MessageListenerAdapter getMessageListenerAdapter(MessageListener messageListener){        return new MessageListenerAdapter(messageListener, "onMessage");    }    /**     * 注入消息监听容器     * @param redisConnectionFactory     * @param messageListenerAdapter     * @return {@link RedisMessageListenerContainer}     * @throws     * @author Bai     * @date 2021/9/7 下午 03:54     */    @Bean    public RedisMessageListenerContainer getRedisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory, MessageListenerAdapter messageListenerAdapter){        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);        //订阅订单支付成功主题        redisMessageListenerContainer.addMessageListener(messageListenerAdapter, new PatternTopic(ORDER_PAY_SUCCESS));        return redisMessageListenerContainer;    }    /**     * 处理内容     * @param connectionFactory     * @return {@link StringRedisTemplate}     * @throws     * @author Bai     * @date 2021/9/7 下午 04:01     */    @Bean    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {        return new StringRedisTemplate(connectionFactory);    }}

接收消息

 

  

import org.springframework.stereotype.Component;/** * @author Bai * @date 2021/9/7 下午 03:51 * @description */@Componentpublic class MessageListener {    public void onMessage(String message){        System.out.println("接收消息:" + message);    }}

测试

发送订单支付成功的消息

 

  

import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.test.context.junit4.SpringRunner;import javax.annotation.Resource;/** * @author Bai * @date 2021/9/7 下午 04:32 * @description */@RunWith(value = SpringRunner.class)@SpringBootTestpublic class RedisPubTest {    /**     * 订单支付完成主题     */    private static final String ORDER_PAY_SUCCESS = "ORDER-PAY-SUCCESS";    @Resource    private StringRedisTemplate stringRedisTemplate;    /**     * 模拟发送5调订单支付完成的消息     * @throws     * @author Bai     * @date 2021/9/7 下午 04:57     */    @Test    public void sendMessage(){        for (int i = 0; i < 5; i++) {            stringRedisTemplate.convertAndSend(ORDER_PAY_SUCCESS,"DD" + System.currentTimeMillis());        }    }}

接收到订单支付成功的消息

 

  

. ____ _ __ _ _/\ / ___'_ __ _ _(_)_ __ __ _ ( ( )___ '_ '_ '_ / _` \/ ___) _) (_ ) ) ) ) ' ____ .___ __ ___, / / / /=========_==============___/=/_/_/_/:: Spring Boot :: (v2.2.10.RELEASE)

 

  2021-09-07 16:56:54.729 INFO 3712 --- [ main] com.demo.redis.RedisSubPubApplication : Starting RedisSubPubApplication on DESKTOP-595LI4G with PID 3712 (D:BaiSourcesspring-boot-demoredis-sub-pubtargetclasses started by 1 in D:BaiSourcesspring-boot-demo)2021-09-07 16:56:54.735 INFO 3712 --- [ main] com.demo.redis.RedisSubPubApplication : No active profile set, falling back to default profiles: default2021-09-07 16:56:55.205 INFO 3712 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!2021-09-07 16:56:55.207 INFO 3712 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.2021-09-07 16:56:55.229 INFO 3712 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11 ms. Found 0 Redis repository interfaces.2021-09-07 16:56:55.557 INFO 3712 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8888 (http)2021-09-07 16:56:55.565 INFO 3712 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2021-09-07 16:56:55.565 INFO 3712 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]2021-09-07 16:56:55.669 INFO 3712 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2021-09-07 16:56:55.669 INFO 3712 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 895 ms2021-09-07 16:56:56.032 INFO 3712 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'2021-09-07 16:56:56.950 INFO 3712 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8888 (http) with context path ''2021-09-07 16:56:56.952 INFO 3712 --- [ main] com.demo.redis.RedisSubPubApplication : Started RedisSubPubApplication in 2.557 seconds (JVM running for 3.436)接收消息:DD1631005025949接收消息:DD1631005025964接收消息:DD1631005025965接收消息:DD1631005025967接收消息:DD1631005025968

  

到此这篇关于SpringBoot+Redis实现消息的发布与订阅的示例代码的文章就介绍到这了,更多相关SpringBoot Redis消息发布与订阅内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • redis队列操作命令,redis 循环队列
  • redis队列操作命令,redis 循环队列,redis实现简单队列
  • redis部署应用服务器上,redis如何启动服务器
  • redis部署应用服务器上,redis如何启动服务器,搭建Redis服务器步骤详细介绍
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决,redis缓存穿透解决方法
  • Redis缓存,redis和缓存
  • Redis缓存,redis和缓存,Redis缓存详解
  • redis的配置,启动,操作和关闭方法有哪些,关闭redis的命令,Redis的配置、启动、操作和关闭方法
  • redis的主从配置方法详解图,Redis主从配置
  • redis的主从配置方法详解图,Redis主从配置,redis的主从配置方法详解
  • redis界面工具,mac安装redis可视化工具
  • redis界面工具,mac安装redis可视化工具,推荐几款 Redis 可视化工具(太厉害了)
  • redis正确使用的十个技巧是什么,redis正确使用的十个技巧有哪些
  • 留言与评论(共有 条评论)
       
    验证码: