补充:es与mysql之间的数据同步 2 使用分页导入的方式把大量数据从mysql导入es

这篇具有很好参考价值的文章主要介绍了补充:es与mysql之间的数据同步 2 使用分页导入的方式把大量数据从mysql导入es。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本片文章只是对之前写的文章的补充,

es与mysql之间的数据同步

http://t.csdn.cn/npHt4

补充一:

之前的文章对于交换机、队列、绑定,使用的是@bean,

而这里使用的是纯注解版

在消费方,声明交换机:

package com.hmall.search.mq;

import com.hmall.search.service.IsearchService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.events.Event;

/**
 * @author ning
 * @since 2022/12/12 0:16
 */

@Slf4j
@Component
public class ItemListener {

    @Autowired
    private IsearchService isearchService;

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "up.queue"),//声明队列
            exchange = @Exchange(name = "item.topic",type = ExchangeTypes.TOPIC),//声明交换机
            key = "item.up"//声明绑定关系
    ))
    private void listenItemUp(Long id){
        log.info("监听到上架消息:"+ id);
        isearchService.saveitById(id);
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "down.queue"),
            exchange = @Exchange(name = "item.topic",type = ExchangeTypes.TOPIC),
            key = "item.down"
    ))
    private void listenItemDown(Long id){
        log.info("监听到下架消息:"+ id);
        isearchService.deleteItemById(id);
    }

}

补充二:

之前的文章是直接使用es操作数据,新增和修改,这样做不是很合适,而且没有遵守单一原则,所以这里使用feign远程调用其他模块的接口方法,

1、新建一个feign模块(如果没有的话)

可以参考

http://t.csdn.cn/GqMVN

2、在模块中新建一个接口ItemClient(使用哪个模块就用哪个模块名+Client),在模块中定义你要在es中调用的方法,(也就是es需要操作数据库,但是其他模块已经写完的方法,就不需要再写一遍了)

例如:需要根据id查询数据库,就把其他模块写完的根据id查询数据库的方法写到接口里

package com.hmall.client;

import com.hmall.common.dto.Item;
import com.hmall.common.dto.PageDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 商品模块的远程调用
 *
 * @author ning
 * @since 2022/12/9 18:39
 */
//表示对应的是itemservice服务器
@FeignClient("itemservice")
public interface ItemClient {

    //分页查询
    @GetMapping("/item/list")
    public PageDTO<Item> list(@RequestParam("page") Integer page, @RequestParam("size") Integer size);

    //根据id查询数据
    @GetMapping("/item/{id}")
    public Item selectById(@PathVariable("id") Long id);
}

以上接口中还有分页查询的内容,详情可以参考

使用分页导入的方式把大量数据从mysql导入es

http://t.csdn.cn/XECXD文章来源地址https://www.toymoban.com/news/detail-527455.html

3、生产方和消费方的代码,只有消费方新增的代码有一点不同,其他的都一样

    //注入es的工具类
    @Autowired
    private RestHighLevelClient client;
    //注入feign远程调用的接口
    @Autowired
    private ItemClient itemClient;

    @Override
    public void saveitById(Long id) {
        try {
            //使用feign的远程调用接口,查询数据库
            //查询一条商品数据,并转为json
            Item item = itemClient.selectById(id);
            ItemDoc itemDoc = new ItemDoc(item);
            String jsonString = JSON.toJSONString(itemDoc);

            //创建请求
            IndexRequest request = new IndexRequest("item").id(id.toString());
            //设置参数
            request.source(jsonString, XContentType.JSON);
            //执行请求
            client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

到了这里,关于补充:es与mysql之间的数据同步 2 使用分页导入的方式把大量数据从mysql导入es的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Flink CDC将Mysql中的数据实时同步到ES

    最近公司要搞搜索,需要把mysql中的数据同步到es中来进行搜索,由于公司已经搭建了flink集群,就打算用flink来做这个同步。本来以为很简单,跟着官网文档走就好了,结果没想到折腾了将近一周的时间…… 我也是没想到,这玩意网上资源竟然这么少,找到的全部都是通过

    2024年02月11日
    浏览(50)
  • 使用Logstash和JDBC将MySQL的数据导入到Elasticsearch(ES)的过程

    使用Logstash和JDBC将MySQL的数据导入到Elasticsearch(ES)的过程包含多个步骤。请注意,首先你需要准备好的JDBC驱动,Logstash实例,Elasticsearch实例,以及你希望导入的MySQL数据。 安装Logstash JDBC Input Plugin :Logstash包含大量插件,其中一个就是JDBC Input Plugin,可以用于从JDBC兼容的数据库

    2024年02月15日
    浏览(43)
  • 【clickhouse】ClickHouse与MySQL之间实时同步数据(MySQL引擎),将MySQL数据实时同步到clickhouse

    参考1:MySQL(通过该配置实现了实时同步) 参考2:experimental MaterializedMySQL 参考3:[experimental] MaterializedMySQL(包含设置 allow_experimental_database_materialized_mysql) MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行

    2024年01月16日
    浏览(41)
  • Mysql不同数据库之间表结构同步

    开发环境的Mysql表结构做了修改,要同步到其他环境数据库中使用数据库管理工具JookDB的表结构同步功能就很方便。虽然Navicat也有这个功能但是有免费的当然是用免费的。 用JookDB添加数据库后在数据库节点上右键选择“同步结构”即可开始表结构同步。 1.选择结构同步的源库

    2024年02月05日
    浏览(50)
  • Elasticsearch和MySQL之间的数据同步问题

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch和MySQL之间的数据同步问题。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威要向诸佬学习呀 🧑个人

    2023年04月19日
    浏览(38)
  • Mysql和ES、Redis数据同步方案汇总_redis同步数据从mysql到es

    文章目录 前言 一、数据同步方案 1.同步双写 [2.异步双写(MQ方式)](#2MQhttpssocsdnnetsosearchqMQspm1001210130017020_53) 3.基于Mysql表定时扫描同步 [4.基于Binlog实时同步](#4BinloghttpssocsdnnetsosearchqBinlogspm1001210130017020_119) [二、数据迁移同步工具选型](#httpssocsdnnetsosearchqspm1001210130017020_141) 总结

    2024年04月23日
    浏览(35)
  • es与mysql的数据同步问题

    方案一:同步调用  缺点:1.业务耦合             2.降低整体性能             3.当一个业务出现问题则直接卡死 方案二:异步通知(解除了两个服务之间的耦合)  缺点:比较依赖与mq 方案三:监听MySQL的binlog日志  三种方式优缺点对比  方案二: 1.引入依赖 2.编写配置

    2023年04月17日
    浏览(43)
  • ELK增量同步数据【MySql->ES】

            1.  linux,已经搭建好的logstash+es+kibana【系列版本7.0X】,es 的plugs中安装ik分词器 ES版本:  Logstash版本:  (以上部署,都是运维同事搞的,我不会部署,同事给力) 1、在Logstash安装目录下【/usr/share/logstash】,新建XX.sh,内容如下: 2. 在Logstash安装目录下【/usr/shar

    2024年02月11日
    浏览(37)
  • Logstash同步Mysql数据至ES

    官方文档 注意版本要和自己的es版本一致 下载地址:logstash 上传至服务器并进行解压。 1、通过官网下载mysql连接jar包 下载地址:mysql 连接jar包 根据自己mysql版本和系统进行选择 ​  ​   ​   ​   ​ 2、在IDEA中复制msyql连接jar包 ​   ​ 将jar包移动至/logstash/logstash-core/lib

    2024年02月10日
    浏览(37)
  • Mysql和ES数据同步方案汇总

    在实际项目开发中,我们经常将Mysql作为业务数据库,ES作为查询数据库,用来实现读写分离,缓解Mysql数据库的查询压力,应对海量数据的复杂查询。这其中有一个很重要的问题,就是如何实现Mysql数据库和ES的数据同步,今天和大家聊聊Mysql和ES数据同步的各种方案。 为什么

    2024年01月20日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包