ElasticSearch下
DSL查询 叶子查询:在特定字段里查询特定值,属于简单查询,很少单独使用 复合查询:以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理: 排序:按照1个或多个字段做排序 分页:根据from或size做分页,类似MySQL 高亮:对搜索结果中的关键字添加特殊样式 聚合:对搜索结果做数据统计以形成报表 基本语法GET /{索引库名}/_search{ "query": { "查询类型": { "查询条件": "条件值" } }} 【例】: GET /items/_search { "query": { "match_all": {} }} 叶子查询1....
ElasticSearch上
安装ElasticSearch Lucene:Java语言的搜索引擎类库,易扩展;高性能(基于倒排索引) Elasticsearch基于Lucene,支持分布式,可水平扩展;提供Restful接口,可被任何语言调用 Elasticsearch结合kibana、logstash、Beats,是一套完整的技术栈,被叫做ELK。 安装ElasticSearchdocker run -d \ --name es \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/share/elasticsearch/data \ -v es-plugins:/usr/share/elasticsearch/plugins \ --privileged \ --network hm-net \ -p 9200:9200 \ -p 9300:9300 \ --restart=always \ ...
RabbitMQ确保消息可靠性
消息丢失的可能性支付服务先扣减余额和更新支付状态(这俩是同步调用),然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下,可能订单已经支付 ,但是更新订单状态却失败了,这就出现了消息丢失。 发送者在发送的过程中出现了网络故障 RabbitMQ在发送消息的过程中出现了问题 消费者在更新订单状态的时候出现了问题 发送者的可靠性发送者确认机制需要与MQ进行通信和确认,会影响消息发送的效率且一般出现的概率极低,所以一般不用这个。 方法1. 发送者重连确保发送者与MQ之间连接的可靠性。有的时候由于网络波动,可能出现发送者连接MQ失败的情况,这个配置是关闭的,可以开启连接失败后的重连机制: spring: rabbitmq: connection-timeout: 1s # 设置MQ的连接超时时间 template: retry: enabled: true # 开启超时重试机制(默认是false) initial-interval: 1000ms # 失败后的初始等待时间 multiplier: 1...
RabbitMQ
虽然多线程也能做异步处理,但是多线程仅限于在同一个进程做异步处理,会占用服务器的资源。MQ是可以分布式的,可以分担服务器的压力。 同步调用和异步调用同步调用优势:时效性强,等待到结果后才返回问题:拓展性差、性能差、级联失败问题 异步调用 消息发送者:投递消息的人(调用者) 消息接收者:接收和处理消息的人(服务提供者) 消息代理:管理、暂存、转发消息(微信服务器) 扣减数据余额和更新支付状态必须采用同步调用。更新订单状态、短信通知用户、增加用户积分,这三个业务其实和支付服务的关系不大,有点业务耦合,可以用异步调用,支付服务先发一条消息给消息代理,交易服务、通知服务、积分服务去监听消息代理。如果服务故障了,没有收到消息,只要这个服务重新启动,消息代理还会投递消息给这个服务。 优势:解除耦合,拓展性好;无需等待;故障隔离;缓存消息,流量削峰填谷。问题:不能立刻得到调用结果,时效性差;不能确定下游业务执行是否成功;业务安全依赖Broker的可靠性。 MQ技术选型MQ:消息队列,存放消息的队列。也就是异步调用的Broker RabbitMQ安装 创建并运行容器 docker...
网关 + Nacos配置管理
网关网关:就是网络的关口,负责请求的路由、转发、身份校验。 网关路由 新建网关模块gateway 引入相关依赖 <!--网关--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos discovery--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--负载均衡--><dependency> ...
Sentinel服务保护 + Seata分布式事务
服务保护【原因】: 微服务相互调用,服务提供者出现故障。 服务调用这没有做好异常处理,导致自身故障。 调用链中所有服务级联失败,导致整个集群故障。 【解决方案】:请求限流、线程隔离、服务熔断【服务保护技术】: Sentinel服务保护官方文档:Sentinel 使用步骤1. 使用docker部署sentinel创建并运行sentinel容器: docker run -d \--net=host \--name sentinel \--restart=always \-e AUTH_USERNAME=admin \-e AUTH_PASSWORD=admin \bladex/sentinel-dashboard:1.8.6 完成后在浏览器输入:192.168.140.101:8858,用户名admin,密码admin 2.在微服务中连接sentinel控制台引入sentinel依赖: <!--sentinel--><dependency> <groupId>com.alibaba.cloud</groupId> ...
nacos注册中心 + OpenFeign远程调用
注册中心注册中心原理服务提供者:暴露服务接口,供其他服务调用服务调用者:调用别的服务提供的接口注册中心:记录并监控微服务各实例状态,推送服务变更信息 服务提供者会在启动时注册自己的信息到注册中心,消费者可以从注册中心订阅和拉取服务信息 服务提供者通过心跳机制向注册中心报告自己的健康状态,当心跳异常时,注册中心会将异常服务剔除,并通知订阅了该服务的消费者。 消费者可以通过负载均衡算法,从多个实例中选择一个。 Nacos注册中心 先导入nacos表 -- 导出 nacos 的数据库结构DROP DATABASE IF EXISTS `nacos`;CREATE DATABASE IF NOT EXISTS `nacos` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;USE `nacos`;-- 导出 表 nacos.config_info 结构DROP TABLE IF EXISTS...
微服务架构
...
Docker
安装Docker1. 卸载已有的Dockeryum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-selinux 2. 配置yum源 安装yum工具 yum install -y yum-utils device-mapper-persistent-data lvm2 配置yum源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3. 安装Dockeryum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin...
javase-Stream流
stream流相当于一个流水线,一共可以分成三大类的方法。 获取stream流 中间方法 终结方法(可以得到一个返回结果的) 获取stream流单列集合获取Stream流public class Demo01 { // 单列集合获取stream流 public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); Collections.addAll(list, "a", "b", "c", "d", "e", "f"); /*Stream<String> stream = list.stream(); // 获取到一条流水线,并把集合中的数据放到流水线上 stream.forEach((x)->...