国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步

這篇具有很好參考價(jià)值的文章主要介紹了分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?引言

本文參考黑馬 分布式Elastic search

Elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容

一、思路分析

?實(shí)現(xiàn)方式

同步調(diào)用

方案一:同步調(diào)用

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud & Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

基本步驟如下:

  • hotel-demo對(duì)外提供接口,用來(lái)修改elasticsearch中的數(shù)據(jù)
  • 酒店管理服務(wù)在完成數(shù)據(jù)庫(kù)操作后,直接調(diào)用hotel-demo提供的接口,

異步通知

方案二:異步通知

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud & Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

流程如下:

  • hotel-admin對(duì)mysql數(shù)據(jù)庫(kù)數(shù)據(jù)完成增、刪、改后,發(fā)送MQ消息
  • hotel-demo監(jiān)聽MQ,接收到消息后完成elasticsearch數(shù)據(jù)修改

監(jiān)聽binlong

方案三:監(jiān)聽binlog

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud & Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

流程如下:

  • 給mysql開啟binlog功能
  • mysql完成增、刪、改操作都會(huì)記錄在binlog中
  • hotel-demo基于canal監(jiān)聽binlog變化,實(shí)時(shí)更新elasticsearch中的內(nèi)容

?框架選擇

方式一:同步調(diào)用

  • 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,粗暴
  • 缺點(diǎn):業(yè)務(wù)耦合度高

方式二:異步通知

  • 優(yōu)點(diǎn):低耦合,實(shí)現(xiàn)難度一般
  • 缺點(diǎn):依賴mq的可靠性

方式三:監(jiān)聽binlog

  • 優(yōu)點(diǎn):完全解除服務(wù)間耦合
  • 缺點(diǎn):開啟binlog增加數(shù)據(jù)庫(kù)負(fù)擔(dān)、實(shí)現(xiàn)復(fù)雜度高

本次實(shí)現(xiàn)方式我們選擇 以RabbitMQ 異步方式 搭載 SpringCloud Alibaba + Feign 實(shí)現(xiàn)。

二、實(shí)現(xiàn)數(shù)據(jù)同步

?需求分析

需求

實(shí)現(xiàn)酒店管理增刪改查業(yè)務(wù),已提供頁(yè)面。 完成其數(shù)據(jù)發(fā)生增刪改查操作時(shí) 同步 ElasticSearch

分析

我們采用分布式技術(shù)的方式來(lái)實(shí)現(xiàn)

框架采用 SpringCloud Alibaba、Nacos 、OpenFeign 遠(yuǎn)程調(diào)用、RabbitMQ 作為消息承載體承載數(shù)據(jù)、 Elastic Search 搜索引擎

?搭建環(huán)境

以下為模塊概覽

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud & Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

主要分為兩大模塊

  • 完成酒店模塊增刪改查業(yè)務(wù),引入MQ依賴,完成其向MQ的發(fā)送消息 此模塊作為生產(chǎn)者
  • 完成ES-MQ模塊,引入MQ、ES依賴,完成接受MQ的消息以及完成對(duì)ES的更新 此模塊作為消費(fèi)者

注意:Nacos需要自行下載,本項(xiàng)目依賴于Nacos注冊(cè)中心, 運(yùn)行起來(lái)后不影響后面的服務(wù)注冊(cè)進(jìn)nacos

本次所用到的 RabbitMQ、 ElasticSearch 均部署在 云服務(wù)器

MQ結(jié)構(gòu)如圖:

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud & Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

?核心源碼

hotel-service 業(yè)務(wù)模塊

導(dǎo)入hotel-service 核心代碼,已完成基礎(chǔ)的增刪改查工作。 具體源碼公眾號(hào)搜索 程序員Bug終結(jié)者 回復(fù) es 獲取

ES模塊引入依賴

<!--amqp-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- ES -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

聲明隊(duì)列交換機(jī)名稱

public class MqConstants {

    /**
     * 交換機(jī)
     */
    public static final String HOTEL_EXCHANGE = "hotel.topic";

    /**
     * 新增或修改的routing_key
     */
    public static final String HOTEL_INSERT_KEY = "hotel.insert";

    /**
     * 刪除的 routing_key
     */
    public static final String HOTEL_DELETE_KEY = "hotel.delete";
}

hotel-service模塊 發(fā)送消息

@RestController
@RequestMapping("hotel")
public class HotelController {

    @Autowired
    private HotelService hotelService;

    @Resource
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/{id}")
    public Hotel queryById(@PathVariable("id") Long id){
        return hotelService.getById(id);
    }

    @GetMapping("/list")
    public PageResult hotelList(
            @RequestParam(value = "page", defaultValue = "1") Integer page,
            @RequestParam(value = "size", defaultValue = "1") Integer size
    ){
        Page<Hotel> result = hotelService.page(new Page<>(page, size));

        return new PageResult(result.getTotal(), result.getRecords());
    }

    @PostMapping
    public void saveHotel(@RequestBody Hotel hotel){
        hotelService.save(hotel);
        rabbitTemplate.convertAndSend(MqConstants.HOTEL_EXCHANGE, MqConstants.HOTEL_INSERT_KEY, hotel.getId());
    }

    @PutMapping()
    public void updateById(@RequestBody Hotel hotel){
        if (hotel.getId() == null) {
            throw new InvalidParameterException("id不能為空");
        }
        hotelService.updateById(hotel);
        rabbitTemplate.convertAndSend(MqConstants.HOTEL_EXCHANGE, MqConstants.HOTEL_INSERT_KEY, hotel.getId());
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable("id") Long id) {
        hotelService.removeById(id);
        rabbitTemplate.convertAndSend(MqConstants.HOTEL_EXCHANGE, MqConstants.HOTEL_DELETE_KEY, id);
    }
}

ES模塊接受消息

@Component
@Slf4j
public class MqConsumerListener {


    @Resource
    private HotelService hotelService;

    /**
     * 監(jiān)聽酒店新增或修改的業(yè)務(wù)
     * @param id
     */
    @RabbitListener(bindings = @QueueBinding(value = @Queue(value = MqConstants.HOTEL_INSERT_KEY, durable = "true"),
            exchange = @Exchange(name = MqConstants.HOTEL_EXCHANGE, type = ExchangeTypes.DIRECT), key = MqConstants.HOTEL_INSERT_KEY))
    public void listenHotelInsertOrUpdate(String id) throws IOException {
        hotelService.insertById(id);
    }

    /**
     * 監(jiān)聽酒店刪除的業(yè)務(wù)
     * @param id
     */
    @RabbitListener(bindings = @QueueBinding(value = @Queue(value = MqConstants.HOTEL_DELETE_KEY, durable = "true"),
            exchange = @Exchange(name = MqConstants.HOTEL_EXCHANGE, type = ExchangeTypes.DIRECT), key = MqConstants.HOTEL_DELETE_KEY))
    public void listenHotelDelete(String id) throws IOException {
        hotelService.deleteById(id);
    }
}

核心方法實(shí)現(xiàn)

@Service
public class HotelService {

    @Resource
    private RestHighLevelClient client;

    @Resource
    private HotelClient hotelClient;

    public void insertById(String id) {
        try {
            //1. 根據(jù)id查詢酒店數(shù)據(jù)
            Hotel hotel = hotelClient.findById(id);
            HotelDoc hotelDoc = new HotelDoc(hotel);
            //2. 準(zhǔn)備Request
            IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());

            //3. 準(zhǔn)備DSL
            request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
            //4. 發(fā)送請(qǐng)求
            client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void deleteById(String id) {
        try {
            //1. 準(zhǔn)備 Request
            DeleteRequest request = new DeleteRequest("hotel", id);
            // 2.發(fā)送請(qǐng)求
            client.delete(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、測(cè)試

運(yùn)行nacos

startup.cmd -m standalone

將hotel-service模塊注冊(cè)到nacos

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud &amp; Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

訪問(wèn)頁(yè)面,對(duì)酒店數(shù)據(jù)進(jìn)行增刪改查操作

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud &amp; Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

將第一條信息價(jià)格修改為399

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud &amp; Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

查看es中數(shù)據(jù)的變化

分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步,Spring Cloud &amp; Spring Boot實(shí)戰(zhàn)指南,分布式,rabbitmq,mysql,elasticsearch,java

成功完成數(shù)據(jù)同步

四、源碼獲取

請(qǐng)聯(lián)系 公眾號(hào) 程序員Bug終結(jié)者 回復(fù) es同步 獲取源碼及數(shù)據(jù)庫(kù)文件

?小結(jié)

以上就是【Bug 終結(jié)者】對(duì) 分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步 的簡(jiǎn)單介紹,ES搜索引擎無(wú)疑是最優(yōu)秀的分布式搜索引擎,使用它,可大大提高項(xiàng)目的靈活、高效性! 通過(guò)本文已了解 MySQL數(shù)據(jù)同步ES基本過(guò)程以及核心實(shí)現(xiàn) 技術(shù)改變世界?。?!

如果這篇【文章】有幫助到你,希望可以給【Bug 終結(jié)者】點(diǎn)個(gè)贊??,創(chuàng)作不易,如果有對(duì)【后端技術(shù)】、【前端領(lǐng)域】感興趣的小可愛,也歡迎關(guān)注?????? 【Bug 終結(jié)者】??????,我將會(huì)給你帶來(lái)巨大的【收獲與驚喜】??????!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847432.html

到了這里,關(guān)于分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分布式消息隊(duì)列:RabbitMQ(1)

    分布式消息隊(duì)列:RabbitMQ(1)

    目錄 一:中間件 二:分布式消息隊(duì)列? 2.1:是消息隊(duì)列 2.1.1:消息隊(duì)列的優(yōu)勢(shì) 2.1.1.1:異步處理化 2.1.1.2:削峰填谷 2.2:分布式消息隊(duì)列 2.2.1:分布式消息隊(duì)列的優(yōu)勢(shì) 2.2.1.1:數(shù)據(jù)的持久化 2.2.1.2:可擴(kuò)展性 2.2.1.3:應(yīng)用解耦 2.2.1.4:發(fā)送訂閱? 2.2.2:分布式消息隊(duì)列的應(yīng)用場(chǎng)景? 三:Rabbitmq 3.1:基

    2024年02月08日
    瀏覽(24)
  • 分布式消息隊(duì)列:Rabbitmq(2)

    分布式消息隊(duì)列:Rabbitmq(2)

    目錄 一:交換機(jī) 1:Direct交換機(jī) 1.1生產(chǎn)者端代碼: ?1.2:消費(fèi)者端代碼: 2:Topic主題交換機(jī)? 2.1:生產(chǎn)者代碼:? 2.2:消費(fèi)者代碼: ?二:核心特性 2.1:消息過(guò)期機(jī)制 2.1.1:給隊(duì)列中的全部消息指定過(guò)期時(shí)間 2.1.2:給某條消息指定過(guò)期時(shí)間? 2.2:死信隊(duì)列 綁定: 讓交換機(jī)和隊(duì)列進(jìn)行關(guān)聯(lián),可以指

    2024年02月08日
    瀏覽(23)
  • Rabbitmq----分布式場(chǎng)景下的應(yīng)用

    Rabbitmq----分布式場(chǎng)景下的應(yīng)用

    如果單機(jī)模式忘記也可以看看這個(gè)快速回顧rabbitmq,在做學(xué)習(xí) 消息隊(duì)列在使用過(guò)程中,面臨著很多實(shí)際問(wèn)題需要思考: 消息從發(fā)送,到消費(fèi)者接收,會(huì)經(jīng)理多個(gè)過(guò)程: 其中的每一步都可能導(dǎo)致消息丟失,常見的丟失原因包括: 發(fā)送時(shí)丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消

    2024年02月08日
    瀏覽(27)
  • 微服務(wù)技術(shù)棧SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

    微服務(wù)技術(shù)棧SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

    聚合(aggregations)可以實(shí)現(xiàn)對(duì)文檔數(shù)據(jù)的統(tǒng)計(jì)、分析、運(yùn)算。聚合常見的有三類: 桶(Bucket)聚合:用來(lái)對(duì)文檔做分組 TermAggregation:按照文檔字段值分組 Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組 度量(Metric)聚合:用以計(jì)算一些值,比如:最大值

    2024年03月26日
    瀏覽(37)
  • 微服務(wù)學(xué)習(xí):SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    微服務(wù)學(xué)習(xí):SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    目錄 一、高級(jí)篇 二、面試篇 ==============實(shí)用篇============== day05-Elasticsearch01 1.初識(shí)elasticsearch 1.4.安裝es、kibana 1.4.1.部署單點(diǎn)es 1.4.2.部署kibana 1.4.3.安裝IK分詞器 1.4.4.總結(jié) 2.索引庫(kù)操作 2.1.mapping映射屬性 2.2.索引庫(kù)的CRUD 2.2.1.創(chuàng)建索引庫(kù)和映射 2.2.2.查詢索引庫(kù) 2.2.3.修改索引庫(kù) 2.

    2024年02月02日
    瀏覽(25)
  • 分布式消息隊(duì)列:Kafka vs RabbitMQ vs ActiveMQ

    在現(xiàn)代分布式系統(tǒng)中,消息隊(duì)列是一種常見的異步通信模式,它可以幫助系統(tǒng)處理高并發(fā)、高可用性以及容錯(cuò)等問(wèn)題。在這篇文章中,我們將深入探討三種流行的分布式消息隊(duì)列:Apache Kafka、RabbitMQ和ActiveMQ。我們將討論它們的核心概念、算法原理、特點(diǎn)以及使用場(chǎng)景。 隨著

    2024年02月02日
    瀏覽(19)
  • Python爬蟲分布式架構(gòu) - Redis/RabbitMQ工作流程介紹

    Python爬蟲分布式架構(gòu) - Redis/RabbitMQ工作流程介紹

    在大規(guī)模數(shù)據(jù)采集和處理任務(wù)中,使用分布式架構(gòu)可以提高效率和可擴(kuò)展性。本文將介紹Python爬蟲分布式架構(gòu)中常用的消息隊(duì)列工具Redis和RabbitMQ的工作流程,幫助你理解分布式爬蟲的原理和應(yīng)用。 為什么需要分布式架構(gòu)? 在數(shù)據(jù)采集任務(wù)中,單機(jī)爬蟲可能面臨性能瓶頸和資

    2024年02月11日
    瀏覽(29)
  • (黑馬出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    (黑馬出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文檔是在心向陽(yáng)光的天域的博客加了一些有助于自己的知識(shí)體系,也歡迎大家關(guān)注這個(gè)大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是這個(gè)視頻](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以讓我們極其方便

    2024年03月12日
    瀏覽(15)
  • 分布式搜索引擎(Elastic Search)+消息隊(duì)列(RabbitMQ)部署(商城4)

    分布式搜索引擎(Elastic Search)+消息隊(duì)列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于實(shí)現(xiàn)全文搜索功能,例如商城中對(duì)商品搜索、搜索、分類搜索、訂單搜索、客戶搜索等。它支持復(fù)雜的查詢語(yǔ)句、中文分詞、近似搜索等功能,可以快速地搜索并返回匹配的結(jié)果。 2、日志分析 Elastic search可以用于實(shí)現(xiàn)實(shí)時(shí)日志分析,例

    2024年02月04日
    瀏覽(21)
  • RabbitMQ——解決分布式事務(wù)問(wèn)題,RabbitMQ的重要作用之一!?。⊥ㄟ^(guò)可靠生產(chǎn)和可靠消費(fèi)來(lái)完美解決!

    RabbitMQ——解決分布式事務(wù)問(wèn)題,RabbitMQ的重要作用之一?。?!通過(guò)可靠生產(chǎn)和可靠消費(fèi)來(lái)完美解決!

    分布式事務(wù)是指涉及多個(gè)獨(dú)立的計(jì)算機(jī)系統(tǒng)(也稱為節(jié)點(diǎn)或參與者)之間的事務(wù)處理。在分布式系統(tǒng)中,每個(gè)節(jié)點(diǎn)可能各自擁有自己的數(shù)據(jù)存儲(chǔ)和事務(wù)管理機(jī)制。分布式事務(wù)的目標(biāo)是保證在跨多個(gè)節(jié)點(diǎn)執(zhí)行的一系列操作可以以一致和可靠的方式執(zhí)行和提交,即使在面對(duì)故障或

    2024年04月23日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包