【资料图】
@
目录黑马- SpringCloud微服务技术栈实用篇完成时间2023-3-22。
yml文件|| test测试类|| 启动类里的配置即可。E:\微服务\实用篇\day01-SpringCloud01\资料\cloud-demo。E:\微服务\实用篇\day03-Docker\资料\cloud-demo。E:\微服务\实用篇\day04-MQ\资料\mq-demo。E:\微服务\实用篇\day05-Elasticsearch01\资料\hotel-demo。E:\微服务\实用篇\day07-Elasticsearch03\资料\hotel-admin。startup.cmd -m standalone。# 关闭systemctl stop firewalld# 禁止开机启动防火墙systemctl disable firewalld#查询防火墙状态systemctl status firewalld# 启动docker服务systemctl start docker # 查询docker服务状态systemctl status docker# 查看版本docker -v# 停止docker服务systemctl stop docker # 重启docker服务systemctl restart docker docker--help查看帮助文档;如:docker images --help-查看所有的镜像,里面有解释和参数的使用说明。#查看帮助文档docker--help#拉取nginx的命令docker pull nginx#查看镜像docker images#查询帮助文档docker save --help#导出镜像到磁盘 -o 导出后的名称 名称:版本docker save -o nginx.tar nginx:latest#删除镜像 rmi 名称:版本 或者 rmi 镜像iddocker rmi nginx:latest#导入镜像docker load -i nginx.tar# 运行dockerdocker run#docker run:运行容器 --name:起名字 -p:宿主机端口(可变):容器端口(不可变) -d:后台运行容器 nginx:是镜像名称docker run --name name -p 80:80 -d nginx#redisdocker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes# 暂停docker pause 容器名字# 从暂停到运行docker unpause 容器名字# 停止docker stop 容器名字# 从停止到运行docker start 容器名字# 查看所有运行的容器及状态docker ps# 查看容器运行日志 docker logs 容器名字# 持续查看输出日志docker logs -f 容器名字# 进入容器执行命令docker exec# docker exec:进入容器内部执行命令 -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互 name:容器名称 bash:进入容器后执行的命令,bash是一个Linux终端的交互命令docker exec -it name bash# 删除指定容器docker rm 容器名字# 数据卷基本语法docker volume [command]# 下方是根据命令的commandcreate # 创建一个volumn + 名称inspect # 显示一个或多个volumn的信息 + 名称ls # 列出所有的volumeprune # 删除未使用的volumerm # 删除一个或多个指定的volumn + 名称# docker run的命令中通过 -v 参数挂载文件或目录到容器中:# (1)-v volume名称:容器内目录# (2)-v 宿主机文件:容器内文件# (3)-v 宿主机目录:容器内目录# docker run:运行容器 --name:起名字 -v volumename:/targetContainerPath -p 8080:80:把宿主机的8080端口映射到容器内的80端口 -d:挂载到后台 nginx:镜像名称docker run --name mn -v html:/root/html -p 8080:80 -d nginx# mysqldocker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql:5.7.25# 每一个指令都会形成一层LayerFROM # 指定基础镜像ENV # 设置环境变量,可在后面指令使用COPY # 拷贝本地文件到镜像的指定目录RUN # 执行Linux的shell命令,一般是安装过程的命令EXPOSE # 指定容器运行时监听的端口ENTRYPOINT # 镜像中应用的启动命令,容器运行时调用# 利用dockerfile来构建镜像 指令后的.是指DockerFile在当前目录下docker build -t javaweb:1.0 .# 将生成的镜像跑起来docker run --name web -p 8090:8090 -d javaweb:1.0# 查看DockerCompose的帮助文档docker-compose --help# 查看创建的容器docker ps# 查看日志 最后可以加微服务名称,查询一个启动的日志docker-compose logs -f# 解决nacos部署慢,重启其它微服务docker-compose restart gateway userservice orderservice# 打开要修改的文件vi /etc/docker/daemon.json# 添加内容:"insecure-registries":["http://192.168.226.134:8080"]# 重加载systemctl daemon-reload# 重启dockersystemctl restart docker# 创建DockerCompose部署带有图象界面的DockerRegistry的yaml文件version: "3.0"services: registry: image: registry volumes: - ./registry-data:/var/lib/registry ui: image: joxit/docker-registry-ui:static ports: - 8080:80 environment: - REGISTRY_TITLE=传智教育私有仓库 - REGISTRY_URL=http://registry:5000 depends_on: - registry# 后台运行docker-compose up -d# 查看现有镜像docker images# 重新tag本地镜像,名称前缀为私有仓库地址docker tag nginx:latest 192.168.226.134:8080/nginx:1.0# 推送镜像docker push 192.168.226.134:8080/nginx:1.0# 删除镜像docker rmi 192.168.226.134:8080/nginx:1.0# 拉取镜像docker pull 192.168.226.134:8080/nginx:1.0# 在线拉取docker pull rabbitmq:3-management# 上传好tar包,命令加载镜像docker load -i mq.tar# 运行MQ容器docker run \ -e RABBITMQ_DEFAULT_USER=itcast \ -e RABBITMQ_DEFAULT_PASS=123321 \ --name mq \ --hostname mq1 \ -p 15672:15672 \ -p 5672:5672 \ -d \ rabbitmq:3-management # 查看全部容器 docker ps -a # 重启后重启mq容器docker start mq# 创建网络docker network create es-net# 关闭虚拟机后,查看局域网络(已配置过,重启后不影响)docker network ls# 导入数据docker load -i es.tar# 运行docker命令,部署单点esdocker 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 es-net \ -p 9200:9200 \ -p 9300:9300 \elasticsearch:7.12.1# 重启后,重启容器docker start es# 输入地址加端口即可访问eshttp://192.168.226.139:9200# 导入数据docker load -i kibana.tar# 运行docker命令,部署kibanadocker run -d \--name kibana \-e ELASTICSEARCH_HOSTS=http://es:9200 \--network=es-net \-p 5601:5601 \kibana:7.12.1# 重启后重启容器docker start kibana# 输入地址加端口即可访问kibanahttp://192.168.226.139:5601ps:(1)重启后只需要重启容器即可;(2)如果没有删除容器,重新运行docker命令部署会报名字重复错误;(3)如果不删除容器,想修改名称创建容器的话,需要在ess和kibana中的请求连接要同步,否则会报Kibana server is not ready yet的问题。
# 在kibana中测试分词器# english-默认分词器、standard-标准分词器POST /_analyze{"text": "好好学习,天天向上","analyzer": "english"}# 安装ik分词器# 查看数据卷elasticsearch的plugins目录位置docker volume inspect es-plugins# 到这个目录下cd /var/lib/docker/volumes/es-plugins/_data# 上传elasticsearch-analysis-ik-7.12.1.zip,然后解压unzip elasticsearch-analysis-ik-7.12.1.zip# 不太建议上面的方式,我试过发现启动会报错,后面改了很久都是报错,不知道哪里的配置文件被修改了,然后恢复快照重新来过# 使用FileZillar直接传输Windows下解压的文件夹,结果是成功的# 重启es容器docker restart es# 查看es日志docker logs -f es# 测试ik分词器# IK分词器包含两种模式# ik_smart:最少切分 -- 被搜索的概论低-粗粒度# ik_max_word:最细切分 -- 内存占用高-细粒度GET /_analyze{ "analyzer": "ik_max_word", "text": "好好学习天天向上,奥利给,噢噢点赞"}注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑
# 打开IK分词器config目录,在IKAnalyzer.cfg.xml配置文件内容添加# 用户可以在这里配置自己的扩展字典ext.dic #用户可以在这里配置自己的扩展停止词字典 *** 添加停用词词典stopword.dic # 新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改奥利给# 在 stopword.dic 添加停用词噢噢# 修改过看效果,重启es容器即可docker restart es# 查看 日志docker logs -f es# DSL语法# 创建索引库名PUT /索引库名# 创建索引库的DSL语法例子PUT /a{"mappings": {"properties": {"info": {"type": "text","analyzer": "ik_smart"},"name":{"type": "object","properties": {"firstName": {"type": "keyword","index": false}}}}}}# 查看索引库GET /索引库名# 删除索引库DELETE /索引库名# 索引库和mapping一旦创建就无法修改,但是可以添加新的字段PUT /索引库名/_mapping{"properties":{"新字段名":{"type":"integer"}}}# 插入文档POST /索引库名/_doc/文档id# 查看文档GET /索引库名/_doc/文档id# 删除文档DELETE /索引库名/_doc/文档id# 插入的DSL语法例子 -- 索引库名与上方创建相同POST /a/_doc/1{"info": "好好学习天天向上","name": {"firstName": "小","lastName": "盈"}}# 修改文档 -- 全量修改,会删除旧文档,添加新文档PUT /索引库名/_doc/文档idPUT /a/_doc/1{"info": "好好学习天天向上","email": "45543563.qq.com","name": {"firstName": "小","lastName": "盈"}}# 局部修改,修改指定字段值 -- 只能修改一个指段POST /索引库名/_update/文档idPOST /a/_update/1{"doc":{"email": "xiaoying@qq.com"}}# 酒店的mappingPUT /hotel{"mappings":{"properties":{"id":{"type": "keyword"},"name":{"type": "text","analyzer": "ik_max_word","copy_to": "all"},"address":{"type": "keyword","index": false},"price":{"type": "integer"},"score":{"type": "integer"},"brand":{"type": "keyword","copy_to": "all"},"city":{"type": "keyword"},"starName":{"type": "keyword"},"business":{"type": "keyword","copy_to": "all"},"location":{"type": "geo_point"},"pic":{"type": "keyword","index": false},"all":{"type": "text","analyzer": "ik_max_word"}}}}match_all。match、multi_match;两者区别match根据一个字段查询,multi_match根据多个字段查询;参与查询的字段越多,查询性能越差。ids、range、term;geo_distance、geo_bounding_box。Boolean Query、function_score。# 查询所有GET /hotel/_search{"query": {"match_all": {}}}# 全文检索 -- match查询(效率高)GET /hotel/_search{"query": {"match": {"all": "外滩如家"}}}# 全文检索 -- multi_matchGET /hotel/_search{"query": {"multi_match": {"query": "外滩如家","fields": ["brand", "name", "business"]}}}# 精确查询 -- term查询 精确匹配GET /hotel/_search{"query": {"term": {"city": {"value": "上海"}}}}# 精确查询 -- range查询 范围过滤GET /hotel/_search{"query": {"range": {"price": {"gte": 100,"lte": 300}}}}# 地理查询 -- distance查询GET /hotel/_search{"query": {"geo_distance": {"distance": "2km","location": "31.21, 121.5"}}}# 复合查询 -- function_score 参加打分# 给“如家”这个品牌的酒店靠前一点GET /hotel/_search{"query": {"function_score": {"query": {"match": {"all": "外滩"}},"functions": [ //算分函数{"filter": { //条件"term": {"brand": "如家"}},"weight": 10 //算分权重}],"boost_mode": "sum" //加权分式}}}# 复合查询 -- Boolean Query # must:必须匹配的条件,可以理解为“与”# should:选择性匹配的条件,可以理解为“或”# must_not:必须不匹配的条件,不参与打分 - 提高效率# filter:必须匹配的条件,不参与打分 - 提高效率# 搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店GET /hotel/_search{"query": {"bool": {"must": [{"match":{"name": "如家"}}],"must_not": [{"range":{"price":{"gt": 400}}}],"filter":[{"geo_distance": {"distance": "20km","location": {"lat": 31.21,"lon": 121.5}}}]}}}from + size--优点:支持随机翻页;缺点:深度分页问题。场景:百度、谷歌、京东等的随机翻页搜索。after search--优点:没有查询上限(单词查询的size不超过10000),缺点:只能向后逐页查询,不支持随机翻页。场景:没有随机翻页需求的搜索,例如手机向下翻页。scroll:优点:没有查询上限(单词查询的size不超过10000),缺点:会额外消耗内存,搜索结果是非实时的,场景:海量数据的获取和迁移。(已弃用)# 对酒店数据按照用户评价降序排序,评价相同的按照价格升序排序GET /hotel/_search{"query": {"match_all": {}},"sort": [{"score": "desc"},{"price": "asc"}]}# 对酒店数据数据按照你的位置坐标的距离升序排序GET /hotel/_search{"query": {"match_all": {}},"sort": [{"_geo_distance": {"location": {"lat": 31.034661,"lon": 121.612282},"order": "asc","unit": "km"}}]}# 分页查询 -- from-分页当前的位置 size-显示文档的总数GET /hotel/_search{"query": {"match_all": {}},"sort":[{"price": "asc"}],"from": 0,"size": 10}# 高亮查询,默认情况下,ES搜索字段必须与高亮字段一致,可以将"require_field_match":"false"-关闭搜索字段和高亮字段匹配GET /hotel/_search{"query": {"match": {"all": "如家"}},"highlight":{"fields":{"name":{"require_field_match":"false"}}}}Bucket(桶聚合):对文档数据分组;TermAggregation:按照文档字段分组;Date Histogram:按日期阶梯分组,如一周或一月为一组。Metric(度量聚合或嵌套聚合):对文档数据做计算,例如avg、min、max、status(同时求sum、min等)等;Pipeline(管道聚合):基于其它聚合结果再做聚合。# 统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合# size-设置size为0,结果中不包含文档,只包含聚合结果# aggs-定义聚合 brandAgg-给聚合起个名字# terms-聚合的类型,按照品牌值聚合,所以选择# field-参与聚合的字段 size- 希望获取的聚合结果数量GET /hotel/_search{"size": 0,"aggs": {"brandAgg": {"terms": {"field":"brand","size": 10}}}}# Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序GET /hotel/_search{"size": 0,"aggs": {"brandAgg": {"terms": {"field":"brand","size": 10,"order": {"_count": "asc"}}}}}# Bucket聚合是对索引库的所有文档做聚合,我们可以限定要聚合的文档范围,只要添加query条件GET /hotel/_search{"query": {"range": {"price": {"lte": 200}}},"size": 0,"aggs": {"brandAgg": {"terms": {"field":"brand","size": 10}}}}# 获取每个品牌的用户评分的min、max、avg等值.# aggs-brands聚合的子聚合,也就是分组后对每组分别计算# scoreAgg-聚合名称# stats-聚合类型,这里stats可以计算min、max、avg等# field-聚合字段,这里是scoreGET /hotel/_search{"size": 0,"aggs": {"brandAgg": {"terms": {"field":"brand","size": 10,"order": {"scoreAgg.avg": "desc"}},"aggs": {"scoreAgg": {"stats": {"field": "score"}}}}}}character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符。tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart。tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等。# 安装pinyin分词器# 查看数据卷elasticsearch的plugins目录位置docker volume inspect es-plugins# 到这个目录下cd /var/lib/docker/volumes/es-plugins/_data# 使用FileZillar直接传输Windows下解压的pinyin分词器的文件夹,结果是成功的# 重启es容器docker restart es# 查看es日志docker logs -f es# 测试拼音分词器GET /_analyze{ "text": ["如家酒店还不错"], "analyzer": "pinyin"}# 删除索引库DELETE /test# 自定义拼音分词器,创建索引库时,通过settings来配置自定义的analyzer(分词器);拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用。--导致多音字都被搜出来# 创建倒排索引时应该用my_analyzer分词器 -- analyzer;# 字段在搜索时应该使用ik_smart分词器 -- search_analyzer;PUT /test{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "ik_max_word", "filter": "py" } }, "filter": { "py": { "type": "pinyin", "keep_full_pinyin": false, "keep_joined_full_pinyin": true, "keep_original": true, "limit_first_letter_length": 16, "remove_duplicated_term": true, "none_chinese_pinyin_tokenize": false } } } }, "mappings":{ "properties":{ "name": { "type": "text", "analyzer": "my_analyzer", "search_analyzer": "ik_smart" } } }}# 测试自定义分词器GET /test/_analyze{ "text": ["如家酒店还不错"], "analyzer": "pinyin"}completion suggester查询-实现自动补全功能。(P128)completion类型;字段值是多词条的数组。# 自动补全的索引库PUT test1{"mappings":{ "properties":{ "title": { "type": "completion" } } }}# 示例数据POST test1/_doc{"title":["Sony", "WH-1000XM3"]}POST test1/_doc{"title":["SK-II", "PITERA"]}POST test1/_doc{"title":["Nintendo", "switch"]}# 自动补全查询POST /test1/_search{ "suggest": { "title_suggest": { "text": "s", # 关键字 "completion": { "field": "title", # 补全字段 "skip_duplicates": true, # 跳过重复的 "size": 10 # 获取前10条结果 } } }}elasticsearch与mysql之间的数据同步(P132)依赖mq的可靠性。开启binlog增加数据库负担、实现复杂度高。--使用canal中间件。两个问题:master eligi(主节点)--备选主节点:主节点可以管理和记录集群状态、决定分片在哪个节点、处理创建和删除索引库的请求。data(数据节点)--数据节点:存储数据、搜索、聚合、CRUD。ingest--数据存储之前的预处理。coordinating(协调节点)--路由请求到其它节点合并其它节点处理的结果,返回给用户。coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片。->微服务技术栈课程视频
https://www.bilibili.com/video/BV1LQ4y127n4?p=1
<-
记录每一个学习瞬间
上一篇:中英绿色智能建造国际论坛长沙开幕 探讨绿色建造新未来-全球快播报
下一篇:最后一页
Copyright 2015-2023 港澳日报网 版权所有 备案号:京ICP备2023022245号-31 联系邮箱:435 226 40 @qq.com