电商项目-数据同步解决方案(二)首页广告缓存同步

embedded/2024/12/28 22:11:20/

一、案例:首页广告缓存更新

缓存更新 基于canal 完成首页广告缓存数据更新

需求分析:当tb_ad(广告)表的数据发生变化时,更新redis中的广告数据。

二、首页广告缓存更新-实现步骤

(1)修改数据监控微服务,监控tb_ad表,当发生增删改操作时,提取position值(广告位置key),发送到rabbitmq

(2)从rabbitmq中提取消息,通过OkHttpClient调用ad_update来实现对广告缓存数据的更新。
在这里插入图片描述

三、首页广告缓存更新-代码实现

3.1 发送消息到MQ

步骤一:在rabbitmq管理后台创建队列 ad_update_queue ,用于接收广告更新通知

步骤二:引入rabbitmq起步依赖

<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId>
</dependency>

步骤三:配置文件application.properties 添加内容

spring.rabbitmq.host=192.168.200.128

步骤四:新增rabbitMQ配置类

@Configuration
public class RabbitMQConfig {//定义队列名称public static final String AD_UPDATE_QUEUE="ad_update_queue";//声明队列@Beanpublic Queue queue(){return new Queue(AD_UPDATE_QUEUE);}}

步骤五:修改BusinessListener类

@CanalEventListener //声明当前的类是canal的监听类
public class BusinessListener {@Autowiredprivate RabbitTemplate rabbitTemplate;/**** @param eventType 当前操作数据库的类型* @param rowData 当前操作数据库的数据*/@ListenPoint(schema = "shangcheng_business",table = "tb_ad")public void adUpdate(CanalEntry.EventType eventType,CanalEntry.RowData rowData){System.out.println("广告表数据发生改变");for (CanalEntry.Column column : rowData.getAfterColumnsList()) {if ("position".equals(column.getName())){System.out.println("发送最新的数据到MQ:"+column.getValue());//发送消息rabbitTemplate.convertAndSend("", RabbitMQConfig.AD_UPDATE_QUEUE,column.getValue());}}}
}

步骤六:测试,运行数据监控微服务canal,新增、修改或删除tb_ad表数据,修改后观察控制台输出和rabbitmq管理界面中ad_update_queue是否接收到消息

3.2 从MQ中提取消息执行更新

步骤一:shangcheng_service_business工程pom.xml引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.9.0</version>
</dependency>

步骤二:在spring节点下添加rabbitmq配置

  rabbitmq:host: 192.168.200.128

步骤三:com.shangcheng.business包下创建listener包,包下创建类

@Component
public class AdListener {@RabbitListener(queues = "ad_update_queue")public void receiveMessage(String message){System.out.println("接收到的消息为:"+message);//发起远程调用OkHttpClient okHttpClient = new OkHttpClient();String url = "http://192.168.200.128/ad_update?position="+message;Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {//请求失败e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException {//请求成功System.out.println("请求成功:"+response.message());}});}
}

步骤四:测试,启动eureka和business微服务,观察控制台输出和数据同步效果。


http://www.ppmy.cn/embedded/149569.html

相关文章

音视频入门知识(一):基本概念篇

一、基本概念篇 编码(encode) 通过特定的压缩技术&#xff0c;将某个视频的视频流格式转换成另一种视频格式的视频流方式。 输入&#xff1a;一串连续的图片帧&#xff1b;输出&#xff1a;连续的二进制字节流 编码的本质&#xff1a;压缩 -> 减少占用空间 YUV420/422可通过…

ONNX 转 TensorRT Bug 记录:IIfConditionalOutputLayer

1. 问题描述 环境&#xff1a;TensorRT-8.6.1.6、CUDA-11.8 报错&#xff1a;Error[4]: /If_OutputLayer: IIfConditionalOutputLayer inputs must have the same shape. Shapes are [-1,384] and [-1,1,384]. 复现代码&#xff1a; import os import torch import torch.n…

流架构的读书笔记(2)

流架构的读书笔记&#xff08;2&#xff09; 一、建模工具之一沃德利地图 推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图 沃德利地图的制作步骤 1确定范围和用户需求 2确定满足用户需求所需的组件 3在一条范围从全新到被人们接受的演进轴上评估这些组成 部分的演…

【Spring核心思想】IoC容器与依赖倒置(DI)

在日常开发中&#xff0c;我们总会面临一个问题&#xff1a;如何优雅地管理对象的创建和依赖&#xff1f; 你可能会写一堆代码来手动构造对象&#xff0c;但这种方式繁琐且难以维护。而当项目变得复杂&#xff0c;依赖链拉长&#xff0c;手动管理对象的方式很快就会捉襟见肘。 …

项目文档-代码检查报告

在项目验收阶段会需要很多项目报告&#xff0c;这里记录一下代码检查报告的整理方式。 代码检查报告&#xff1a;项目需要记录每一个改动的代码类&#xff0c;并记录检查结果和修改情况&#xff0c;以及检查人员。 检查结果&#xff1a;是否检查通过 修改情况&#xff1a;暂无需…

用VBA自动更正错误的注释引用序号

将扫描pdf文件进行文字识别时&#xff0c;对带圈数字表示的注释引用和注释序号往往会将数字序号认错。例如下面的文件&#xff1a; 这个文件的段落十分有规律&#xff1a;每首诗的标题样式为标题3&#xff0c;标题下面的段落为诗的正文&#xff0c;下面有一个样式为标题4的段落…

怎么配置每一次重启服务器后,自动启动Tocmat

前言 宝子们&#xff0c;今天来给大家详细讲讲服务器如何配置每次重启后自动启动 Tomcat&#xff0c;让你的服务器应用始终保持在线状态&#xff0c;高效运行&#xff01; windows版本 在 Windows 系统下&#xff0c;有两种常用的方法可以实现这个目标。 第一种方法是利用服…

SQL 实战:字符串处理函数 – 数据清洗与文本格式化

在数据分析和开发过程中&#xff0c;原始数据往往存在格式不统一、冗余字符等问题&#xff0c;直接影响查询和展示效果。SQL 提供了一系列强大的字符串处理函数&#xff0c;能够帮助开发者进行数据清洗和文本格式化操作&#xff0c;提高数据质量和查询效率。本文将通过多个实战…