手动搭建mall过程记录

学习mall项目过程记录

目标:

  1. 利用mall项目学习过程,熟练 Spring Boot 的操作;
  2. 同时过程中解决遇到的一些 Java 基本知识点,例如并发编程上的一些知识点;
  3. 学习对其他常用组件的操作。
  4. 这个过程中遇到什么不会的就学习什么。
  5. 期间遇到的第三方软件就使用docker来处理。
    • 遇到使用时,可以查看《极客时间中相关使用的地方》

20210822

  1. 先把整理博客过一遍,看看是不是循序渐进的讲解,是否跟着操作就可以?

    • 可以先把框架搭起来,然后部署运行,后面再扩充。
    • 通过学习项目,学习技术知识点,同时项目中解决某个问题的思路和使用的技术。
  2. tiny01,问题,,MyBatis 使用样例去看一下,可以过一下《极客时间中关于Mybatis的视频和demo》,熟悉一下后再来操作

  3. 基本spring boot 后台接口 整合 Swagger-UI

  4. 利用 Redis 进行验证码校验

  5. 利用 Spring Security + JWT 进行用户登录和认证校验,同时进行权限校验;

  6. 将商品信息添加到es中,供分析查询。

  7. 将用户浏览商品记录存放在mongodb,但是为什么?

  8. 整合 rabbitMQ,实现延迟消息?处理下单没有付款

    • 那么,如果下单后付款了呢?从ttl队列在消息超时前,将消息取走?

20210823

  1. 先搭框架,遇到不会的就先看一下该技术,然后再继续。
  2. mybatis,pagehelper,MyBatis genertator 三个mybatis 相关的工具怎么使用?
    • 简单了解一下,剩下的边使用边学习。
      • MyBatis Generator,基本达到可用的目标了
      • MyBatis 看一下手册
      • PageHelper 边用边看

20210901

  1. 之前学习了 MyBatis Generator 模块
  2. 今天开始把基础内容搭建一下
  3. Controller 中的常用注解及他们的搭配
  4. 在线 API 文档常用插件
    • Swagger-UI –ok
    • Docsify API

20210902

  1. 安装 elasticsearch ,中文分词,kibana客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    # 创建一个网络,方便后面kibana与 es连接
    docker network create mall-network

    # docker 启动单节点集群
    docker run --name mall-elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.12.0

    docker run --name mall-kibana --link=mall-elasticsearch:es -p 5601:5601 -d kibana:7.12.0
    docker run --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.14.1

    docker run --name mall-kibana --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://mall-elasticsearch:9200" -d kibana:7.12.0

    修改配置,解决跨域访问问题
    首先进入到容器中,然后进入到指定目录修改elasticsearch.yml文件。
    docker exec -it mall-elasticsearch /bin/bash
    cd /usr/share/elasticsearch/config/
    vi elasticsearch.yml
    在elasticsearch.yml的文件末尾加上:
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    修改配置后重启容器即可。
    docker restart mall-elasticsearch

    安装ik分词器
    注意:elasticsearch的版本和ik分词器的版本需要保持一致,不然在重启的时候会失败。可以在这查看所有版本,选择合适自己版本的右键复制链接地址即可。
    docker exec -it mall-elasticsearch /bin/bash
    cd /usr/share/elasticsearch/plugins/
    elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip
    --这个分词器可以离线安装吗?
    exit
    docker restart mall-elasticsearch

    启动以后可以打开浏览器输入http://localhost:5601就可以打开kibana的界面了。
    然后可以在kibana界面的dev tools中验证是否安装成功;

    POST _analyze
    {
    "text": "美国留给伊拉克的是一个烂摊子吗?",
    "analyzer": "ik_max_word"
    }
  2. docker run --link的作用
    
    docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
    
    --link的格式:
    
    --link <name or id>:alias
    
    其中,name和id是源容器的name和id,alias是源容器在link下的别名。
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    3. docker 已经创建的 container 如何修改配置?比如添加一个 --net 的网络配置?

    4. 先实现 es 与 spring boot 的集成,然后再把 spring-data 看一下,之后再进行 spring-mongoDB 的集成,可以算作对 spring-data 的熟练度操作

    5. 后续还是需要对 elasticsearch ,redis 这些工具熟悉操作

    6. 当使用的框架需要升级时,需要注意程序中调用的外部系统是否需要跟着升级,例如,将 Spring Boot-2.13 升级到 2.3.0,此时,2.3.0中依赖的 elasticsearch 所需要的包 中有对 elasticsearch 系统版本号的依赖,这时就需要对es进行升级并对升级后新jar的改动做业务程序上的改动。

    7. 查一下 spring data es 如何配置连接 es,尤其是客户端版本jar 比安装的es版本老可以吗?

    8. ```
    X-Compile-Elasticsearch-Version: 6.4.3 这个什么意思?
  3. Spring Boot 连接 es集群遇到问题

    1
    2
    3
    2021-09-02 17:17:57.272 ERROR 24068 --- [           main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{58oIvCIHQq2lIg6Ut6hJww}{127.0.0.1}{127.0.0.1:9200}]

    原因,版本不对应,具体是 Elasticsearch 的版本与 spring-data-elasticsearch 的版本不对应,导致客户端不兼容服务,连不上。参考官方提供的兼容版本,要么替换 spring boot 的版本,要么更换 elasticsearch 的版本,或者不使用 spring-data-elasticsearch , 改用 Transport Client
  4. 从 MySQL 导入数据到 elasticsearch 报错

    1
    2
    Error attempting to get column 'productCategoryName' from result set.  Cause: java.sql.SQLDataException: Cannot determine value type from string 'T恤'

20210903

  1. 熟悉一下 Spring data
  2. mybatis
  3. redis
  4. es
  5. 数据结构
  6. 单元测试

问题:

Spring Data 的 Repository 中 自定义的 查询接口谁来实现?

  1. Spring Boot 连接 es集群遇到问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    2021-09-02 17:17:57.272 ERROR 24068 --- [           main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{58oIvCIHQq2lIg6Ut6hJww}{127.0.0.1}{127.0.0.1:9200}]

    原因,版本不对应,具体是 Elasticsearch 的版本与 spring-data-elasticsearch 的版本不对应,导致客户端不兼容服务,连不上。参考官方提供的兼容版本,要么替换 spring boot 的版本,要么更换 elasticsearch 的版本。


    参考官方提供的 spring-data-elasticsearch 样例
    https://github.com/spring-projects/spring-data-examples/tree/main/elasticsearch/example


    spring-data-elasticsearch、Elasticsearch 客户端驱动程序和 Spring Boot 版本之间的兼容性可以在参考官方文档。
    https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions

    升级之后 spring-data-elasticsearch 配置文件怎么配置?
    查看 Spring Boot 参考文档中 Feature 章节
    https://docs.spring.io/spring-boot/docs/2.5.3/reference/html/features.html#features.nosql.elasticsearch

    总结,依赖外部系统时,多关注版本的兼容性。

  2. 关于ES7.X移除Transport Client 性能疑惑

    问:Transport Client是基于Netty实现的tcp客户端.非阻塞IO 多路复用 在高并发下表现很好。但是Rest Client是基于HTTP实现的.HTTP1.1不支持多路复用.在高并发下性能应该会下降的很明显。性能上有下降的情况下,为什么要移除 TC 呢?

    答:性能是会有一些影响,不过现实情况,这些差异你根本不用担心的,使用 HTTP 代替 TCP 更多的是避免版本耦合的问题,Transport Client 耦合太高了,以前服务器和客户端版本不一致,会出现两边对象无法反序列化的问题,如果用 TCP,升级服务端,客户端也得都升级,什么滚动升级基本上也别想了。 此为 HTTP 性能已经足够强悍了,并发吞吐同样可以达到很高,更多的时候是其它资源先不够,此外 Rest 协议底层一样也是基于 Netty 的(去看看RestXXXAction里面的prepareRequest()实现方法就明白了)。Rest Client可以多指定几个ES服务器呢,轮巡处理。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信