springboot3 连接 oceanbase + logproxy数据同步到redis

2024-06-21 20:12

本文主要是介绍springboot3 连接 oceanbase + logproxy数据同步到redis,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我这用的是 社区版的 单机, rocky liunx 安装oceanbase

注意事项:

logproxy 是 CDC 模式 ,   springboot 可以直接订阅

canal 是 binlog模式,   canal 订阅 logproxy, springboot 订阅 canal

logproxy 也可以转  binlog

大数据量跟高频率推荐  binlog

1: oceanbase 下载地址:

OceanBase分布式数据库-海量数据 笔笔算数

2: 安装 obd web 界面安装

 文档地址:

OceanBase分布式数据库-海量数据 笔笔算数

tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh
obd web

obd 集群命令
https://www.oceanbase.com/docs/community-obd-cn-10000000001690699

# 查看集群列表
obd cluster list

# 查看集群状态,以部署名为 demo为例
obd cluster display demo

# 停止运行中的集群,以部署名为 demo为例
obd cluster stop demo

# 销毁已部署的集群,以部署名为 demo 为例
obd cluster destroy demo

启动 ob  demo = 名称
obd cluster restart demo

3: 下载 logproxy

   Releases · oceanbase/oblogproxy · GitHub

4: 安装 logproxy

文档地址OceanBase分布式数据库-海量数据 笔笔算数

下载完成后,通过如下命令进行安装:

rpm -i oblogproxy-{version}.{arch}.rpm

项目安装默认为 /usr/local/oblogproxy

5: 配置和启动 logproxy

 注意这里配置的用户, sys下新建租户, 有 且必须具备 sys 租户下 OceanBase 数据库的读权限。就是sys下新建租户, 授权OceanBase  的读权限给这个新建的租户

先配置执行 sys 新建的 用户名密码 

sh run.sh config_sys  sys passwd

cd /usr/local/oblogproxy/

./run.sh start / stop

   

6: 代码实现:

OceanBase分布式数据库-海量数据 笔笔算数

<dependency>
  <groupId>com.oceanbase.logclient</groupId>
  <artifactId>logproxy-client</artifactId>
  <version>1.1.0</version>
</dependency>
 

ObReaderConfig config = new ObReaderConfig();
// 设置OceanBase root server 地址列表,格式为(可以支持多个,用';'分隔):ip1:rpc_port1:sql_port1;ip2:rpc_port2:sql_port2
config.setRsList("xxx.xxx.xxx.1:2882:2881;xxx.xxx.xxx.2:2882:2881");
// 设置用户名和密码(非系统租户)
config.setUsername("r***");  这里可以直接用数据库的租户和密码
config.setPassword("****");
// 设置启动位点(UNIX时间戳,单位s), 0表示从当前时间启动。
config.setStartTimestamp(0L);
// 设置订阅表白名单,格式为:tenant.db.table, '*'表示通配.
config.setTableWhiteList("sys.*.*");  sys是租户,一般会自己新建一个租户存放数据库如 demo.*.*// 指定oblogproxy服务地址,创建实例.
LogProxyClient client = new LogProxyClient("xxx.xxx.xxx.1", 2983, config);
// 添加 RecordListener
client.addListener(new RecordListener() {@Overridepublic void notify(LogMessage message){// 处理消息if(StringUtils.isBlank(message.getTableName())){return;}if(!tableName.contains(message.getTableName())){return;}// 处理消息switch (message.getOpt()) {case INSERT:insertSql(message.getFieldList(), message.getTableName());break;case UPDATE:updateSql(message.getFieldList(), message.getTableName());break;case DELETE:deleteSql(message.getFieldList(), message.getTableName());break;default:break;}}@Overridepublic void onException(LogProxyClientException e) {// 处理错误if (e.needStop()) {// 不可恢复异常,需要停止Clientclient.stop();}}
});// 启动
client.start();
client.join();//新增的SQLprivate void insertSql(List<DataMessage.Record.Field> list, String tableName) {if (CollectionUtils.isEmpty(list)) {return;}list 就是行数据, 可以查看对象看看具体的信息getFieldname() 字段名getValue().toString(CommonConstant.UTF8MB4)  字段值}

7: 程序启动后 可以观察 程序的打印:

 fail  auth  就是 logproxy 的 sh run.sh config_sys sys passwd 这个命令配置的 用户名密码不对

如下表示连接和 订阅成功

logproxy 日志打印:

cd /usr/local/oblogproxy/

tail -f log/logproxy.log 

只要

1: sh run.sh config_sys sys passwd 这里是 sys下新建的租户 用户名和密码正确

2:config.setUsername("r***");  这里可以直接用数据库的租户和密码
config.setPassword("****");

就没问题了

sys 系统租户,

ocp 管理用的

demo 自己新建的, 用来创建数据库 的  , (新建数据库,用户名,密码)

config.setUsername("r***") 就是这个数据库的用户名和密码

这篇关于springboot3 连接 oceanbase + logproxy数据同步到redis的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082221

相关文章

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E