今日学习, es文档操作和索引库操作,docker基本操作,RestClient操作
索引库操作
- 索引库就类似于数据库表,mapping映射就类似表的结构
- 我们要向es中存储数据,必须先创建
库
和表
mapping映射属性
-
mapping是对索引库中文档的约束
type
index
analyzer
properties
-
创建索引库和映射
-
查询索引库
GET /{索引库名}
-
修改索引库
PUT /{索引库名}/_mapping
-
删除索引库
DELETE /{索引库名}
文档操作
-
创建文档:POST /{索引库名}/_doc/{id}
-
查询文档:GET /{索引库名}/_doc/{id}
-
删除文档:DELETE /{索引库名}/_doc/{id}
-
修改文档
- 全量修改:
PUT /{索引库名}/_doc/{id}
- 增量修改:
POST /{索引库名}/_update/{id}
- 全量修改:
初始化RestCliet
- 在
ElasticSearch
提供的API中,与ElasticSearch
一切交互都封装在一个名为RestHighLevelClient
的类中,必须先完成这个对象的初始化,建立与ES的连接
- 引入ES的RestHighLevelClient的依赖
- 初始化
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方法中实现执行本地事务逻辑。