今日学习, es文档操作和索引库操作 | 青训营笔记

29 阅读2分钟

今日学习, es文档操作和索引库操作,docker基本操作,RestClient操作

索引库操作


  • 索引库就类似于数据库表,mapping映射就类似表的结构
  • 我们要向es中存储数据,必须先创建

mapping映射属性

  • mapping是对索引库中文档的约束

    • type
    • index
    • analyzer
    • properties
  • 创建索引库和映射

  • 查询索引库

    GET /{索引库名}

  • 修改索引库

    PUT /{索引库名}/_mapping

  • 删除索引库 DELETE /{索引库名}

文档操作


  1. 创建文档:POST /{索引库名}/_doc/{id}

  2. 查询文档:GET /{索引库名}/_doc/{id}

  3. 删除文档:DELETE /{索引库名}/_doc/{id}

  4. 修改文档

    • 全量修改:PUT /{索引库名}/_doc/{id}
    • 增量修改:POST /{索引库名}/_update/{id}

初始化RestCliet

  • ElasticSearch提供的API中,与ElasticSearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与ES的连接
  1. 引入ES的RestHighLevelClient的依赖
  2. 初始化
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://127.0.0.1:9200") ));

RocketMQ补充


  • 分布式事务有很多种解决方案,其中一种就是使用RocketMQ的事务消息来达到最终一致性。

  • 生产者向RocketMQ服务端发送半消息,什么叫半消息呢,就是暂不能投递消费者的消息,发送方已经将消息成功发送到了MQ服务端,此时消息被标记为暂不能投递状态,需要等待生产者对该消息的二次确认。

  • MQ服务端给生产者发送ack,告诉生产者半消息已经成功收到了。

  • 发送方开始执行本地数据库事务的逻辑。

  • 执行完成以后将结果告诉MQ服务端,本地事务执行成功就告诉commint,MQ Server收到commit后则将半消息状态置为可投递,consumer最终将收到该消息;本地事务执行失败则发送rollback,MQ Server收到rollback以后则删除半消息,订阅费将不会收到该条消息。

  • 未收到第4步的确认信息时,回查事务状态。消息回查: 因为网络闪断、生产者重启等原因,RocketMQ 的发送方会提供一个反查事务状态接口,如果一段时间内半消息没有收到任何操作请求,那么 Broker 会通过反查接口得知发送方事务是否执行成功。

  • 发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。

  • 发送方根据检查本地事务的最终状态再次提交二次确认,发送commit或者rollback。上述就是整个事务消息的执行流程,下面我们来看下如何在代码中操作。

  • RocketMQ中提供了一个TransactionListener接口,我们需要实现它,然后在executeLocalTransaction方法中实现执行本地事务逻辑。