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

PS怎么布局网站结构物流平台运营

PS怎么布局网站结构,物流平台运营,太原怎样优化网站建设,西安响应式网站建设哪家强目录 1. 环境准备 1.1 MySQL配置 1.2 部署Canal Server 2. Spring Boot项目配置 2.1 添加依赖 2.2 配置参数 3. 实现Canal监听与同步 3.1 Canal客户端监听 3.2 同步到Redis 3.3 同步到Elasticsearch 4. 注意事项 在Spring Boot中通过Canal监听MySQL数据库变更并同步…

目录

1. 环境准备

1.1 MySQL配置

1.2 部署Canal Server

2. Spring Boot项目配置

2.1 添加依赖

2.2 配置参数

3. 实现Canal监听与同步

3.1 Canal客户端监听

3.2 同步到Redis

3.3 同步到Elasticsearch

4. 注意事项


在Spring Boot中通过Canal监听MySQL数据库变更并同步更新Redis和Elasticsearch,可按照以下步骤实现:


1. 环境准备

1.1 MySQL配置
  • 开启Binlog并设置为ROW模式:
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1
  • 创建Canal用户并授权:
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
1.2 部署Canal Server
  1. 下载Canal Server:Canal Releases
  2. 修改配置 conf/example/instance.properties
canal.instance.master.address=127.0.0.1:3306 
canal.instance.dbUsername=canal 
canal.instance.dbPassword=canal 
canal.instance.filter.regex=.*\\..*  # 监听所有库表,或指定如test.user

2. Spring Boot项目配置

2.1 添加依赖
<!-- Canal客户端 -->
<dependency><groupId>com.alibaba.otter</groupId> <artifactId>canal.client</artifactId> <version>1.1.6</version>
</dependency>
<!-- Redis -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Elasticsearch -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.2 配置参数

application.yml

canal:server: 127.0.0.1:11111destination: exampleusername: canalpassword: canalspring:redis:host: localhostport: 6379data:elasticsearch:cluster-nodes: localhost:9200

3. 实现Canal监听与同步

3.1 Canal客户端监听
@Component
public class CanalListener {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate ElasticsearchRestTemplate esTemplate;@PostConstructpublic void init() {CanalConnector connector = CanalConnectors.newSingleConnector( new InetSocketAddress("127.0.0.1", 11111), "example", "canal", "canal");Thread thread = new Thread(() -> {connector.connect(); connector.subscribe(".*\\..*"); while (true) {Message message = connector.getWithoutAck(100); long batchId = message.getId(); if (batchId != -1) {processEntry(message.getEntries()); connector.ack(batchId); }}});thread.start(); }private void processEntry(List<Entry> entries) {for (Entry entry : entries) {if (entry.getEntryType()  == EntryType.ROWDATA) {RowChange rowChange = RowChange.parseFrom(entry.getStoreValue()); for (RowData rowData : rowChange.getRowDatasList())  {String tableName = entry.getHeader().getTableName(); EventType eventType = rowChange.getEventType(); // 解析变更前后的数据Map<String, String> before = parseColumns(rowData.getBeforeColumnsList()); Map<String, String> after = parseColumns(rowData.getAfterColumnsList()); // 根据事件类型同步数据switch (eventType) {case INSERT:case UPDATE:syncToRedis(tableName, after);syncToElasticsearch(tableName, after);break;case DELETE:deleteFromRedis(tableName, before);deleteFromElasticsearch(tableName, before);break;}}}}}private Map<String, String> parseColumns(List<Column> columns) {return columns.stream() .collect(Collectors.toMap(Column::getName,  Column::getValue));}
}
3.2 同步到Redis
private void syncToRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id");  // 假设主键为idredisTemplate.opsForValue().set(key,  data);
}private void deleteFromRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id"); redisTemplate.delete(key); 
}
3.3 同步到Elasticsearch
private void syncToElasticsearch(String tableName, Map<String, String> data) {IndexQuery indexQuery = new IndexQueryBuilder().withId(data.get("id")) .withObject(data).build();esTemplate.index(indexQuery,  IndexCoordinates.of(tableName)); 
}private void deleteFromElasticsearch(String tableName, Map<String, String> data) {esTemplate.delete(data.get("id"),  IndexCoordinates.of(tableName)); 
}

4. 注意事项

  1. 异常处理:增加重试机制或记录错误日志,确保网络波动时的数据一致性。
  2. 性能优化:批量处理Canal消息,减少Redis/ES的频繁写入。
  3. 数据结构:确保Elasticsearch的索引Mapping与MySQL表结构兼容。
  4. 事务管理:如需强一致性,可结合本地事务表或消息队列(如RocketMQ)做可靠投递。

通过以上步骤,Spring Boot应用能够实时监听MySQL变更,并自动同步到Redis和Elasticsearch,保障数据一致性。


文章转载自:

http://COtuRHA9.btnmj.cn
http://l9JtdLcZ.btnmj.cn
http://tEiG19FZ.btnmj.cn
http://pyWcdqP0.btnmj.cn
http://Wq9rjlam.btnmj.cn
http://TsI0HOsD.btnmj.cn
http://elZyQFLE.btnmj.cn
http://ZZ24DcEH.btnmj.cn
http://99LvSGvN.btnmj.cn
http://ORHHB0NB.btnmj.cn
http://pgtaXrvT.btnmj.cn
http://Smo9w69J.btnmj.cn
http://P6sKQM2g.btnmj.cn
http://z2Blozts.btnmj.cn
http://oJuE8RsG.btnmj.cn
http://IZLWYYja.btnmj.cn
http://tOsTc60i.btnmj.cn
http://4FECjr0Q.btnmj.cn
http://CrPP4WHM.btnmj.cn
http://vrvcjCMC.btnmj.cn
http://Vvfof9Ah.btnmj.cn
http://QZN6RHgA.btnmj.cn
http://sEHwga6w.btnmj.cn
http://tK1po70O.btnmj.cn
http://vvOaP6B0.btnmj.cn
http://pysdIbDu.btnmj.cn
http://Tf5xBHwx.btnmj.cn
http://D3nU0a0T.btnmj.cn
http://xHuI3nNi.btnmj.cn
http://RG7W9TR2.btnmj.cn
http://www.dtcms.com/wzjs/706324.html

相关文章:

  • 佛山公司做网站中国建筑app下载
  • 专业建站公司费用做app需要什么技术
  • 网站集约化平台网站建设企业需要准备资料
  • 浙江省建设信息港网站自助建站营销招商
  • 重庆网站设计优化seo招聘
  • 佛山公司建网站昆明做网站优化的公司
  • 心雨在线高端网站建设网站建设质量体系审核指导
  • 深圳做手机的企业网站查看邮箱注册过的网站
  • 用手机怎么做免费网站公众号小程序怎么做
  • 电商网站变化做网站背景图片浪漫爱情
  • 用dedecms 做门户网站百度搜索网站
  • 域名访问网站在哪里找国外网站国内做二维码
  • 百度站长平台论坛网站服务器是注册域名平台吗
  • 有合作社做网站得不山东网站备案拍照
  • 学校网站html模板中国建设银行手机网站首页
  • 舟山网站建设代理关键词是什么意思
  • 商城网站建设排名wordpress开发工具
  • 西宁市城乡规划和建设局网站最近军事新闻
  • 企业网站模板源代码专门做图片的网站cms
  • 网站方案书免费济南房产网官网首页
  • 无证做音频网站违法吗呼和浩特百度公司
  • 百度高级搜索怎么用宝安网站优化
  • 本地网站404错误服务器网站建设流程
  • 为什么推荐企业做网站太原网站设计公司
  • 苏州建设职业培训中心网站常州孟河镇建设工程交易网站
  • 免费地图制作网站建站系统主要包括企业网站系统
  • 国外著名的网站设计公司一直免费的服务器下载安装
  • 网站建设技术手段免费行情软件app网站直播
  • 宁波本地网站排行开发一个小程序一般需要多少钱呢
  • 营销型网站维护费用做网站开始要注意什么