springboot2.0整合redis_灰度发布的方式

springboot2.0整合redis_灰度发布的方式一、简介1、发布订阅SUBSCRIBE,UNSUBSCRIBE和PUBLISH实现了发布/订阅消息范例,发送者(publishers)不用编程就可以向特定的接受者发送消息(subscribers).Rather,发布的消息进入通道,不需要知道有没有订阅者.订阅者发表感兴趣的一个或多个通道,并且只接受他们感兴趣的消息,不管发布者是不是存在.发布者和订阅者的解耦可以允许更大的伸缩性和更多动态的网络拓扑。2、说明本篇文章是继:【SpringBoot】三十四、SpringBoot

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、简介

二、注入消息发布/订阅

  • 1、添加消息监听器
/** * 消息监听 * <p> * 可以传入多个 MessageListenerAdapter */
@Bean
RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory, MessageListenerAdapter messageListenerAdapter) { 
   
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    // 监听所有库的key过期事件
    container.setConnectionFactory(connectionFactory);
    // 可以添加多个 messageListener,配置不同的通道
    container.addMessageListener(messageListenerAdapter, new PatternTopic("user"));
    return container;
}

所有的订阅消息,都需要在这里进行注册绑定,new PatternTopic(“user”),表示发布的主题信息

  • 小插曲
    前面我们学习了监听 key 过期事件,如果我们只需要监听当前库的 key 过期事件,可以这样写:
@Value("${spring.redis.database}")
public String redisDatabaseIndex;

先拿到我们项目中使用的 Redis 的库索引

// 监听当前库的key过期
container.addMessageListener(messageListenerAdapter, new PatternTopic("__keyevent@" + redisDatabaseIndex + "__:expired"));

然后使用发布/订阅模式,订阅主题为:keyevent@0:expired 的消息,则表示订阅数据库索引为 0 的 key 过期事件,监听所有的库则为:keyevent@*:expired

  • 2、绑定消息处理器
/** * 消息监听器适配器,绑定消息处理器 * <p> * 可以配置多个 listenerAdapter,监听不同的通道 */
@Bean
MessageListenerAdapter listenerAdapter(RedisMessageListener receiver) { 
   
    return new MessageListenerAdapter(receiver, "onMessage");
}

也就是说,当我们订阅的频道,当有消息进来时,指定它的处理类以及处理方法

三、注入消息处理器

上面我们已经注入了 RedisMessageListener 消息处理器,并指定了处理方法 onMessage(),代码如下:

package com.zyxx.common.redis;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;

/** * Redis 消息接收 * * @Author Lizhou **/
@Slf4j
@Component
public class RedisMessageListener implements MessageListener { 
   

    @Override
    public void onMessage(Message message, byte[] pattern) { 
   
        // 接收的topic
        log.info("channel:" + new String(pattern));
        // 消息的POJO
        log.info("message:" + message.toString());
    }
}

需要实现 MessageListener 接口,重写 onMessage() 方法,然后就可以获取到通道以及消息了,从而进行我们的一些业务逻辑处理

四、操作API

在 RedisUtils 中,我们增加一个操作方法

/** * 向通道发布消息 */
public boolean convertAndSend(String channel, Object message) { 
   
    if (StringUtils.isBlank(channel)) { 
   
        return false;
    }
    try { 
   
        template.convertAndSend(channel, message);
        log.info("发送消息成功,channel:{},message:{}", channel, message);
        return true;
    } catch (Exception e) { 
   
        log.info("发送消息失败,channel:{},message:{}", channel, message);
        e.printStackTrace();
    }
    return false;
}

这里的 channel 相当于 我们存入数据的时候的 key,如果该通道不存在,则会新建一个通道

五、测试

  • 1、测试用例
package com.zyxx.redistest;

import com.zyxx.redistest.common.RedisUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class RedisTestApplicationTests { 
   

    @Autowired
    private RedisUtils redisUtil;

    @Test
    void contextLoads() { 
   
        String message = "Hello World!";
        // 发送消息
        redisUtil.convertAndSend("user", message);
    }
}

我们向通道 user 发送了一条 “Hello World!” 的消息

  • 2、测试结果
    发送消息
    可以看出,我们的消息发送成功,再看控制台
    接收消息
    我们接收到通道 user 发送了一条 “Hello World!” 的消息

如您在阅读中发现不足,欢迎留言!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190640.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 苹果电脑python官网下载步骤-Python下载和安装图文教程[超详细]

    苹果电脑python官网下载步骤-Python下载和安装图文教程[超详细]如今python语言非常火,很多小伙伴都开学习python,但是很多小伙伴在安装python的时候遇到问题,下面我们就想详细介绍介绍python下载和安装的方法。1、打开python下载链接https://www.python.org/downloads/,点击自己想要的版本。2、我想下载python最新版本3.7.4,点击“Download”。3、打开链接后,往下滑动,找到“Files”。…

  • HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页

    HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页)HTML+CSS+JavaScript学生DW网页设计作业成品web课程设计网页常见网页设计作业题材有个人、美食、公司、学校、旅游、电商、宠物、电器、茶叶、家居、酒店、舞蹈、动漫、明星、服装、体育、化妆品、物流、环保、书籍、婚纱、军事、游戏、节日、戒烟、电影、摄影、文化、家乡、鲜花、礼品、汽车、其他等网页设计题目,A+水平作业,可满足大学生网页大作业网页设

  • JavaMD5加密「建议收藏」

    JavaMD5加密「建议收藏」Java实现MD5加密什么是MD5:MD5信息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。使用方法:1、引入maven坐标,导入相应的包在pom.xml中引入包的坐标<dependency> <groupId>commons-codec</groupId> <artifactI

  • Linux下安装mysql-8.0.21

    Linux下安装mysql-8.0.21转载原文https://www.jianshu.com/p/4587e9429702下面记录了我在Linux(Centos7)环境下安装Mysql的完整过程,实操记录,绝非水文,如有错误或遗漏,欢迎指正。安装过程中务必保证文件路径的前后统一,否则可能会导致不可预期的结果,推荐直接使用文中的命令进行操作。一安装前准备1、检查是否已经安装过mysql,执行命令[root@localhost/]#rpm-qa|grepmysql从执行结果,可以看出我们已经安装了

  • 论文阅读笔记(十三)——利用卷积神经网络进行农场猪脸识别

    论文阅读笔记(十三)——利用卷积神经网络进行农场猪脸识别论文阅读笔记(十三)——利用卷积神经网络进行农场猪的人脸识别论文简介论文全称:《Towardson-farmpigfacerecognitionusingconvolutionalneuralnetworks》中文名:《利用卷积神经网络进行农场猪的人脸识别》期刊情况投稿期刊:《ComputersinIndustry》期刊情况:中科院二区影响因子4Q1分区初审一个月,总时间约为6个月摘要近年来,由于继续采取集约化做法和需要精确的客观测量(例如体重),识别猪和牛

  • tfs安装教程_2010版cad安装步骤

    tfs安装教程_2010版cad安装步骤安装过程:  一、安装操作系统  安装Windows2008R2简体中文版  二、准备安装过程中的需要的用户账户,并设置相应权限  具体流程如下:  1、点击“开始”——“管理工具”——“计较机管理”  2、选择“本地用户和组”——“用户”,在右边空白处点击右键,选择“新用户”  3、分别添加名为TFSREPORTS、TFSSERVICE、TFSBUILD、TFS…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号