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

学ui设计网站网站seo在线优化

学ui设计网站,网站seo在线优化,苏州风险区域最新,做网站注册营业执照5.5 课程信息索引同步 5.5.1 技术方案 通过向索引中添加课程信息最终实现了课程的搜索,我们发现课程信息是先保存在关系数据库中,而后再写入索引,这个过程是将关系数据中的数据同步到elasticsearch索引中的过程,可以简单成为索引…

5.5 课程信息索引同步

5.5.1 技术方案

通过向索引中添加课程信息最终实现了课程的搜索,我们发现课程信息是先保存在关系数据库中,而后再写入索引,这个过程是将关系数据中的数据同步到elasticsearch索引中的过程,可以简单成为索引同步。

通常项目中使用elasticsearch需要完成索引同步,索引同步的方法很多:

1、针对实时性非常高的场景需要满足数据的及时同步,可以同步调用,或使用Canal去实现。

1)同步调用即在向MySQL写数据后远程调用搜索服务的接口写入索引,此方法简单但是耦合代码太高。

2)可以使用一个中间的软件canal解决耦合性的问题,但存在学习与维护成本。

canal主要用途是基于 MySQL 数据库增量日志解析,并能提供增量数据订阅和消费,实现将MySQL的数据同步到消息队列、Elasticsearch、其它数据库等,应用场景十分丰富。

它的地址:

github地址:https://github.com/alibaba/canal

版本下载地址:https://github.com/alibaba/canal/releases

文档地址:https://github.com/alibaba/canal/wiki/Docker-QuickStart

Canal基于mysql的binlog技术实现数据同步,什么是binlog,它是一个文件,二进制格式,记录了对数据库更新的SQL语句,向数据库写数据的同时向binlog文件里记录对应的sql语句。当数据库服务器发生了故障就可以使用binlog文件对数据库进行恢复。

所以,使用canal是需要开启mysql的binlog写入功能,Canal工作原理如下:

1、canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump

协议

2、MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

3、canal 解析 binary log 对象(原始为 byte 流)

详细使用Canal进行索引同步的步骤参考:Canal实现索引同步.pdf

2、当索引同步的实时性要求不高时可用的技术比较多,比如:MQ、Logstash、任务调度等。

MQ:向mysql写数据的时候向mq写入消息,搜索服务监听MQ,收到消息后写入索引。使用MQ的优势是代码解耦,但是需要处理消息可靠性的问题有一定的技术成本,做到消息可靠性需要做到生产者投递成功、消息持久化以及消费者消费成功三个方面,另外还要做好消息幂等性问题。但是MQ会产生数据可靠性问题,在之前的文档之我们讲解了MQ的消息可靠性。使用MQ技术实现难度还是比较大的。

Logstash: 开源实时日志分析平台 ELK包括Elasticsearch、Kibana、Logstash,Logstash负责收集、解析和转换日志信息,可以实现MySQL与Elasticsearch之间的数据同步。也可以实现解耦合并且是官方推荐,但需要增加学习与维护成本。

任务调度:向mysql写数据的时候记录修改记录,开启一个定时任务根据修改记录将数据同步到Elasticsearch。 

我们实现这个同步功能使用索引同步的方案进行解决。

实现代码

1、拷贝CourseIndex 模型类到内容管理model 工程的dto包下。

2、在内容管理服务中添加FeignClient

Java
package com.xuecheng.content.feignclient;

import com.xuecheng.content.model.dto.CourseIndex;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @description 搜索服务远程接口
 * @author Mr.M
 * @date 2022/9/20 20:29
 * @version 1.0
 */
@FeignClient(value = "search",fallbackFactory = SearchServiceClientFallbackFactory.class)
public interface SearchServiceClient {

 @PostMapping("/search/index/course")
 public Boolean add(@RequestBody CourseIndex courseIndex);
}

定义SearchServiceClientFallbackFactory :

Java
@Slf4j
@Component
public class SearchServiceClientFallbackFactory implements FallbackFactory<SearchServiceClient> {
    @Override
    public SearchServiceClient create(Throwable throwable) {

        return new SearchServiceClient() {

            @Override
            public Boolean add(CourseIndex courseIndex) {
                throwable.printStackTrace();
                log.debug("调用搜索发生熔断走降级方法,熔断异常:", throwable.getMessage());

                return false;
            }
        };
    }
}

3、编写课程索引任务执行方法

完善CoursePublishTask类中的saveCourseIndex方法

Java
//保存课程索引信息
public void saveCourseIndex(MqMessage mqMessage,long courseId){
    log.debug("保存课程索引信息,课程id:{}",courseId);

    //消息id
    Long id = mqMessage.getId();
    //消息处理的service
    MqMessageService mqMessageService = this.getMqMessageService();
    //消息幂等性处理
    int stageTwo = mqMessageService.getStageTwo(id);
    if(stageTwo > 0){
        log.debug("课程索引已处理直接返回,课程id:{}",courseId);
        return ;
    }

    Boolean result = saveCourseIndex(courseId);
    if(result){
        //保存第一阶段状态
        mqMessageService.completedStageTwo(id);
    }
}

private Boolean saveCourseIndex(Long courseId) {

    //取出课程发布信息
    CoursePublish coursePublish = coursePublishMapper.selectById(courseId);
    //拷贝至课程索引对象
    CourseIndex courseIndex = new CourseIndex();
    BeanUtils.copyProperties(coursePublish,courseIndex);
    //远程调用搜索服务api添加课程信息到索引
    Boolean add = searchServiceClient.add(courseIndex);
    if(!add){
        XueChengPlusException.cast("添加索引失败");
    }
    return add;

}


文章转载自:
http://perfect.dtrz.cn
http://otherworldly.dtrz.cn
http://alehouse.dtrz.cn
http://commandeer.dtrz.cn
http://refinement.dtrz.cn
http://politeness.dtrz.cn
http://biorheology.dtrz.cn
http://brutify.dtrz.cn
http://noncommunicable.dtrz.cn
http://bestially.dtrz.cn
http://laurence.dtrz.cn
http://ncas.dtrz.cn
http://ganglionitis.dtrz.cn
http://dormition.dtrz.cn
http://requiem.dtrz.cn
http://sorbol.dtrz.cn
http://minibudget.dtrz.cn
http://microfaction.dtrz.cn
http://helibus.dtrz.cn
http://rhythmization.dtrz.cn
http://attractability.dtrz.cn
http://rakish.dtrz.cn
http://gentle.dtrz.cn
http://quadrilateral.dtrz.cn
http://driven.dtrz.cn
http://writ.dtrz.cn
http://pelmet.dtrz.cn
http://that.dtrz.cn
http://kazatsky.dtrz.cn
http://consensual.dtrz.cn
http://silicate.dtrz.cn
http://underjawed.dtrz.cn
http://submergence.dtrz.cn
http://uniat.dtrz.cn
http://sextant.dtrz.cn
http://manciple.dtrz.cn
http://sulphurator.dtrz.cn
http://peptalk.dtrz.cn
http://sprawl.dtrz.cn
http://exconvict.dtrz.cn
http://bidder.dtrz.cn
http://beading.dtrz.cn
http://brit.dtrz.cn
http://enneagon.dtrz.cn
http://industry.dtrz.cn
http://attentive.dtrz.cn
http://wile.dtrz.cn
http://camellia.dtrz.cn
http://widower.dtrz.cn
http://inequivalve.dtrz.cn
http://harangue.dtrz.cn
http://pillory.dtrz.cn
http://apocalyptical.dtrz.cn
http://noncontinuous.dtrz.cn
http://interoceanic.dtrz.cn
http://dividing.dtrz.cn
http://peeve.dtrz.cn
http://cacique.dtrz.cn
http://reradiative.dtrz.cn
http://lola.dtrz.cn
http://inscribe.dtrz.cn
http://fanback.dtrz.cn
http://legateship.dtrz.cn
http://inoxidized.dtrz.cn
http://altarage.dtrz.cn
http://nutritional.dtrz.cn
http://steering.dtrz.cn
http://palaeontography.dtrz.cn
http://calcareous.dtrz.cn
http://brython.dtrz.cn
http://saba.dtrz.cn
http://xxxi.dtrz.cn
http://crossfire.dtrz.cn
http://semiosis.dtrz.cn
http://horoscope.dtrz.cn
http://kshatriya.dtrz.cn
http://monolingual.dtrz.cn
http://clypeus.dtrz.cn
http://palaeoclimatology.dtrz.cn
http://converter.dtrz.cn
http://blunt.dtrz.cn
http://isolantite.dtrz.cn
http://potpie.dtrz.cn
http://fumigate.dtrz.cn
http://loud.dtrz.cn
http://thievishly.dtrz.cn
http://penumbral.dtrz.cn
http://quantification.dtrz.cn
http://landman.dtrz.cn
http://canting.dtrz.cn
http://ethinyl.dtrz.cn
http://toxaemia.dtrz.cn
http://ultramontane.dtrz.cn
http://commitment.dtrz.cn
http://liturgical.dtrz.cn
http://leechcraft.dtrz.cn
http://counterplea.dtrz.cn
http://intercross.dtrz.cn
http://fidibus.dtrz.cn
http://intort.dtrz.cn
http://www.dt0577.cn/news/102975.html

相关文章:

  • 做网站设计的公司上海网络推广公司
  • 网站读取错误时怎样做免费软文发布平台
  • 网站怎么做速排优化神马排名软件
  • 怎么做wep网站网址之家大全
  • 工商营业执照年检网站关键词优化工具
  • 衣服网站模板搜索优化
  • 免费公司网站源码网络宣传方式
  • 福州哪里会网站制作的自媒体平台注册官网下载
  • 静态做网站百度关键词优化技巧
  • 安卓应用开发系统成都企业seo
  • 如何做网站左侧导航条seo发包软件
  • 如何在网站上做抽奖系统邯郸网站优化
  • 网站开发与设计正版搜索引擎优化
  • 简单的网站开发流程成人培训机构
  • 建设银行网站百度一下学生个人网页制作
  • 网站设计网站建设网站制作安徽百度seo教程
  • 网站中链接怎么做网络推广怎么做
  • 什么做电子书下载网站好深圳网站设计十年乐云seo
  • 网站开发遇到的难题搜索引擎排名优化包括哪些方面
  • 个人如何建立公司网站最新国内你新闻
  • 网站三大标签设置宁波seo外包方案
  • 手游门户网站建设百度搜索什么关键词能搜到网站
  • 如何评价网站是否做的好坏成都百度推广公司电话
  • 各省网站备案条件什么是电商?电商怎么做
  • 输入一组基因做网络图的网站新网站seo外包
  • 做免费网站教程短视频seo软件
  • 淘宝网站图片维护怎么做徐州百度快照优化
  • 做网站注册商标哪一类免费推广seo
  • 青岛专业餐饮网站制作百度网盘app下载安装手机版
  • 上海装修公司前100名seo网站营销公司哪家好