当前位置: 首页 > news >正文

使用redis实现发布订阅功能及问题

如何使用redis实现发布订阅及遇到的问题

使用背景:
服务A通过接口操作服务B,实现相应逻辑。生产环境上,服务A有两个pod,服务B有3个pod
通过接口调用时,请求只能打到服务B的一个pod上,而我们想要的是服务B的每个pod都能收到服务A发送的请求数据,所以使用redis的发布订阅来实现

实现方法:
1、发送方-服务A
构造需要发送的实体数据objectData
String jsonStr = JSONUtil.toJsonStr(objectData);
使用redisTemplate.convertAndSend(“channel_operate”,jsonStr);方法像指定的通道“channel_operate”中发送的数据为Object类型

2、接收方-服务B
1)redis配置类中,增加消息监听的逻辑

/**
* 消息监听
*/
@Bean
public MessageListenerAdapter messageListenerAdapter(RedisSubscriber scriber){return new MessageListenerAdapter(scriber);
}/**
* 消息监听容器
*/
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory,MessageListenerAdapter messageListenerAdapter){RedisMessageListenerContainer  container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.addMessageListener(messageListenerAdapter,new ChannelTopic("channel_operate"));return container;
}

2)增加订阅到的redis消息类

@Component
public class RedisSubscriber  implements MessageListener {/*** 处理接收到的消息*/public void onMessage(Message message){//接收到数据字符串String valueStr = message.toString();//去掉数据中的转义字符StringEscapeUtils.unescapeJava(valueStr);//如果处理后的数据开头和结尾有多余的字符,使用substring截取你需要的数据即可//转换为实体对象,JSONUtil是hutool-all包中的工具类JSONUtil.toBean();//处理自己的逻辑......  }
}

代码咔咔写完了,然后就是启动服务测试逻辑了
。。启动报错了。。一个错误是说啥超时,另一个问题就是
java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/SubscriptionListener
提示就是加载SubscriptionListener这个类失败了,找不到,搜一圈之后各种尝试,然后找到了解决办法
说是redis包的问题,项目中用的是

<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>
</dependency>

需要改成

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId>
</dependency>

再启动就正常了

相关文章:

使用redis实现发布订阅功能及问题

如何使用redis实现发布订阅及遇到的问题 使用背景&#xff1a; 服务A通过接口操作服务B&#xff0c;实现相应逻辑。生产环境上&#xff0c;服务A有两个pod&#xff0c;服务B有3个pod 通过接口调用时&#xff0c;请求只能打到服务B的一个pod上&#xff0c;而我们想要的是服务B的…...

Debug日程工作经验总结日程常用

数据库 db连接命令 kubectl exec -it -n de dbs-53-cdf57d8dd-l4l29 sh su - postgres psql psql -h 10.115.19.118 -p 12080 -U postgres -d clouddb SET search_path TO “h.com”; select * from ems_ice limit 1; 也可以不切换schema&#xff0c;直接sql查询 select * f…...

Apache Paimon主键表的一些最佳实践

今天我们说说Paimon主键表的一些使用上的注意事项。 一、主键表 主键表是Paimon的一种表类型。用户可以插入、更新或删除表中的记录。 说的直白点就是&#xff0c;允许你设置唯一主键&#xff0c;然后覆盖更新。 Bucket选择 无论分区表还是未分区表&#xff0c;Bucket都是最小的…...

React面试常见题目(基础-进阶)

React面试常见题目及详细回答讲解 基础题目&#xff08;20个&#xff09; 什么是React&#xff1f; 回答&#xff1a;React是一个用于构建用户界面的JavaScript库&#xff0c;它允许你将UI拆分成可复用的组件。React起源于Facebook的内部项目&#xff0c;用于构建高性能的Web应…...

AI赋能:开启你的副业创业之路

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;越来越多的人开始探索与之相关的副业机会。AI不仅深刻改变了我们的工作和生活方式&#xff0c;还为愿意学习和运用这项技术的人们打开了丰富的创业和增收之门。今天&#xff0c;我们就来盘点几条与AI相关的副…...

前端文件上传组件流程的封装

1. 前端文件上传流程 选择文件&#xff1a; 用户点击上传按钮&#xff0c;选择要上传的文件。使用 <input type"file"> 或 FileReader API 读取文件。 文件校验&#xff1a; 校验文件的大小、格式等信息&#xff0c;提前过滤掉不符合要求的文件&#xff0c;避免…...

图像篡改研究

使用生成对抗网络 (GAN) 来篡改已有的图片涉及生成和修改图像的技术。以下是如何使用GAN对现有图像进行篡改的详细步骤&#xff1a; 1. 选择合适的GAN模型 不同类型的GAN模型适用于不同的图像处理任务。以下是几个常见的GAN模型及其应用&#xff1a; CycleGAN&#xff1a;用…...

wlan的8种组网方式的区别

1&#xff09;方式一&#xff1a;直连模式 二层组网&#xff08;直接转发/ 集中转发&#xff09; &#xff08;2&#xff09;方式二&#xff1a;直连模式 三层组网&#xff08;集中转发&#xff09; &#xff08;3&#xff09;方式三&#xff1a;旁挂模式 二层组网&#xff08;…...

取消element-ui中账号和密码登录功能浏览器默认的填充色,element-ui登录账号密码输入框禁用浏览器默认填充色问题

标题 问题展示 修改后 <div class="loginForm"><el-formref="formB":model="formDataB":rules="rulesB"class="login-form"label-position="left"><el-form-item prop="userNo" clas…...

Postman:高效的API测试工具

在现代软件开发中&#xff0c;前后端分离的架构越来越普遍。前端开发者与后端开发者之间的协作需要一种高效的方式来测试和验证API接口。在这个背景下&#xff0c;Postman作为一款强大的API测试工具&#xff0c;受到了广泛的关注和使用。 今天将介绍什么是Postman、为什么要使用…...

设计模式-观察者模式(代码实现、源码级别应用、使用场景)

提示&#xff1a;观察者模式的代码实现、观察者模式的使用场景、观察者模式源码级别的应用、观察者模式的优点、 文章目录 前言一、定义二、类图三、代码实现四、应用场景五、源码级别的应用总结 前言 随着时间的推移&#xff0c;我现在越来越感觉自己的代码不够优雅了&#x…...

9种 Vuejs 常用事件修饰符与使用指南

前言 事件修饰符是 Vue.js 中一种特殊的语法标记&#xff0c;通过在事件名称后加上 . 和修饰符名称&#xff0c;可以轻松地修改事件的默认行为。这些修饰符不仅能够提升代码的清晰度&#xff0c;还能够避免一些常见的编程陷阱。Vue.js 提供了一系列事件修饰符&#xff0c;帮助…...

第十四题刮开有奖

这道题还是将我们下载好的附件先查壳 发现无壳且为32位 所以我们用32位的IDA打开 打开后ShftF12发现一串可疑的字符串 我们跟进看看 发现了这个函数 看这里有string数组 首先给了一串七v7 v8v9的数据 下面还有一个函数 我们再跟进一下 发现这大概是前面v7那堆数据的加密方式 我…...

vue3+vite使用dataV后项目运行报错、页面空白问题

Vue 大屏数据展示组件库官网&#xff1a;http://datav.jiaminghi.com/guide/ 我的版本是&#xff1a;“jiaminghi/data-view”: “^2.10.0” 一、dataV引入&#xff0c;看官网也可 // 安装 &#xff08; 我的安装版本 "jiaminghi/data-view": "^2.10.0" …...

PDF 【人工智能白皮书 】【大模型安全实践白皮书】【大模型白皮书】【大模型/深度学习/人工智能原理/心智学习】

【2024 中国人工智能发展白皮书 】【2023 中国人工智能白皮书】【大模型/深度学习/人工智能原理/心智学习】 前言下面所有涉及到的白皮书文件的总下载链接&#xff08;网盘&#xff09;&#xff1a; 2024 人工智能发展白皮书 深圳市易行网数字科技有限公司2024 大模型训练数据白…...

【vue】13.深入理解递归组件

在Vue.js的开发实践中&#xff0c;组件是构建界面的核心概念。而递归组件则是一种特殊的组件&#xff0c;它能够自己调用自己&#xff0c;从而创造出无限嵌套的界面结构。本文将带你了解递归组件的应用&#xff0c;以及如何在Vue中实现和使用它。 一.什么是递归组件&#xff1f…...

【OFDM】OFDM Radar Algorithms in Mobile Communication Networks

[1] Maximum Likelihood Speed and Distance Estimation for OFDM Radar 1-CRB估计 1-初步形式 首先单频信号频率估计的CRB,也就是原文Eq.(3.53) v a r [ ω ^ ] ≥ 6 σ N 2 ( N 2 − 1 ) N \mathrm{var}[\hat{\omega}]\geq\frac{6\sigma_N^2}{(N^2-1)N} var[ω^]≥(N2−…...

如何检测java中的内存泄露及溢出,并预防?

引言 在Java开发中,内存管理是一个至关重要的方面。尽管Java有垃圾回收机制,但开发者仍然需要关注内存泄漏和溢出的问题。 内存泄漏会导致应用程序的性能下降,甚至崩溃,而内存溢出则会导致Java虚拟机(JVM)抛出OutOfMemoryError异常。 本文将探讨如何检测Java项目中的内…...

kafka 如何减少数据丢失?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列&#xff0c;广泛用…...

CTF-PWN: 虚表(vtable)

vtable vtable&#xff08;虚表&#xff0c;virtual table&#xff09;是面向对象编程中的一个关键概念&#xff0c;主要用于实现多态性&#xff08;polymorphism&#xff09;。它是一种数据结构&#xff0c;通常是一个指针数组&#xff0c;包含了类的虚函数&#xff08;virtu…...

OpenClaw配置优化:GLM-4.7-Flash模型响应速度提升

OpenClaw配置优化&#xff1a;GLM-4.7-Flash模型响应速度提升 1. 为什么需要优化GLM-4.7-Flash的响应速度 第一次用OpenClaw对接GLM-4.7-Flash模型时&#xff0c;我遇到了典型的"等待焦虑"——一个简单的文件整理任务竟然花了3分钟才返回结果。通过日志分析发现&am…...

Git提交时Personal Access Token权限不足:如何正确配置workflow scope

1. 为什么Git提交会提示Personal Access Token权限不足&#xff1f; 最近在团队协作中遇到一个典型问题&#xff1a;当开发者尝试推送包含.github/workflows目录的代码到GitHub仓库时&#xff0c;系统突然报错refusing to allow a Personal Access Token to create or update w…...

实测2-5分钟:CogVideoX-2b生成速度与画质平衡的真实体验报告

实测2-5分钟&#xff1a;CogVideoX-2b生成速度与画质平衡的真实体验报告 1. 从文字到视频&#xff1a;CogVideoX-2b能做什么&#xff1f; 想象一下&#xff0c;你只需要输入一段文字描述&#xff0c;就能在几分钟内获得一段6秒的高清视频。这不是科幻电影里的场景&#xff0c…...

突破Windows多显示器显示壁垒:SetDPI重新定义显示体验

突破Windows多显示器显示壁垒&#xff1a;SetDPI重新定义显示体验 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 在当今多设备协同工作的时代&#xff0c;显示器已成为我们与数字世界交互的重要窗口。然而&#xff0c;当程序员小李将笔…...

永磁同步电机双矢量模型预测电流MPCC控制仿真:传统与现代控制策略的对比分析

永磁同步电机双矢量模型预测电流MPCC控制仿真【参考文献】 &#xff08;1&#xff09;参考文献&#xff1a;《永磁同步电机鲁棒双矢量模型预测电流控制_郭鑫》 &#xff08;2&#xff09;描述&#xff1a;传统单矢量预测电流控制在单个控制周期内只能输出单个电压矢量&#xff…...

nli-distilroberta-base环境配置:Ubuntu/CentOS下Python依赖与端口映射设置

nli-distilroberta-base环境配置&#xff1a;Ubuntu/CentOS下Python依赖与端口映射设置 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于判断两个句子之间的逻辑关系。这个轻量级模型保留了RoBERTa-base模型9…...

终极指南:如何在Windows电脑上直接安装Android应用

终极指南&#xff1a;如何在Windows电脑上直接安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows系统设计的Android应用安…...

Android音频输出流实战:从AudioFlinger到HAL层的完整调用链解析

Android音频输出流深度解析&#xff1a;从框架设计到硬件交互 1. Android音频系统架构概览 Android音频子系统采用分层设计&#xff0c;每一层都有明确的职责划分。理解这个架构是分析音频输出流的基础。 核心层级结构&#xff1a; 应用层&#xff1a;通过AudioTrack、MediaPla…...

美军“转正”美科技公司AI系统,专家解读

来源&#xff1a;环球时报【环球时报报道 记者 刘扬】据路透社等外媒近日报道&#xff0c;五角大楼将把美国科技公司Palantir的人工智能&#xff08;AI&#xff09;系统Maven列为“正式在编项目”&#xff0c;使美军多军种将该公司的相关技术用于军事领域。五角大楼强调&#x…...

IOMMU性能调优全攻略:从基础原理到实战技巧

IOMMU性能调优全攻略&#xff1a;从基础原理到实战技巧 在数据中心和云计算环境中&#xff0c;IOMMU&#xff08;输入输出内存管理单元&#xff09;作为硬件辅助虚拟化的关键技术组件&#xff0c;其性能表现直接影响着整个系统的吞吐量和延迟。对于需要处理高并发I/O负载的场景…...