当前位置:   article > 正文

黑马商城(微服务项目)

黑马商城

从P36开始跟着视频微服务01-01.导入黑马商城_哔哩哔哩_bilibili和在线学习文档⁠​​​⁠‍​⁠​​‌​⁠​​​​​​‍​‬‌‬​​⁠‍​​​‌‍​​⁠​‬‬​⁠⁠day03-微服务01 - 成电飞书云文档 (feishu.cn)一起部署

一、环境配置:

1.yum问题:Cannot find a valid baseurl for repo: base/7/x86_6

解决:centos7 There are no enabled repos - Jerry` - 博客园 (cnblogs.com)​​​​​

2.MobaXterm Home Edition安装:关杀毒软件避免下载失败

idea打开hmall在Maven中reload失败:

3.hmall项目配置文件(如 Maven 的 pom.xml)中声明的外部库无法从远程仓库下载

报错情况1:依赖解析失败,未成功下载,点报错下面的try,强制更新Maven快照

报错情况2:用jdk11,项目中的依赖版本都不用改,然后记得不仅要按照文档的springboot里点开设置Java11,还有点开项目中的依赖配置看是不是sdk11,要一致,否则还是报错。

便捷点可以直接在报错中点开这种:

报错情况3:package报错Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid',可以用http://t.csdnimg.cn/doeNi解决

报错情况4:进入18080端口登录出现用户名和密码错误,这是浏览器出现了问题

        【4.1idea报错】ERROR 10476 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.hmall.common.exception.UnauthorizedException: 未登录] with root cause

        【4.2浏览器控制台报错】Failed to load resource: net::ERR_CERT_DATE_INVALID
utils.js:1  Uncaught (in promise) Object

解决:禁用ssl,使用http不要用https

server:
  port: 8080
  ssl:
    enabled: false

4.SSH配置

要注意自己设置的ip和net8、net1、物理机的ip地址是不是相同了,然后注意要在同一网段(源主机的掩码和源主机的ip,源主机的掩码和虚拟机的ip,与运算结果相同)

5.centos7发现vim按esc没反应

按照这个方法顺利解决http://t.csdnimg.cn/2byoe

6.安装MobaXterm后就可以直接在上面上传文件,安装了,按照http://t.csdnimg.cn/vjRFR安装了vs

7.docker安装

出现报错:[Errno 14] curl#7 - "Failed to connect to 2a03:2880:f11a:83:face:b00c:0:25de: Network is unreachable"

解决:注意关闭防火墙没用,应该是源的问题,用这篇文章中的源安装:Centos环境docker的正确安装及疑难杂症 - 东邪西毒 - 博客园 (cnblogs.com)

8.安装mysql

出现报错:Unable to find image 'mysql:latest' locally

解决:http://t.csdnimg.cn/G9QH8先按照这个,然后docker pull mysql:latest,最后就按照学习文档中的run命令就可以了。

使用MySQL的客户端工具连接MySQL:i.http://t.csdnimg.cn/gNmjj,ii.cmd测试:mysql -h 虚拟机ip -P 3306 -u root -p,iii.MySQL客户端软件连接这个mysql

如果都没有问题,再次打开出现连接不上且logs里没有报错,就全部重启一遍

9.nginx

开启运行闪退,没有关系,先看任务管理器中有没有nginx进程,有就是对的,没有就看logs

10.sentinel 

启动报错:找不到或无法加载主类 .port=8090 以及Error: Unable to access jarfile .\xxxx.jar

解决:http://t.csdnimg.cn/2UfSC

二、环境布置部署命令行

  1. #安装docker
  2. sudo yum install -y yum-utils \
  3. device-mapper-persistent-data \
  4. lvm2
  5. sudo yum-config-manager \
  6. --add-repo \
  7. https://download.docker.com/linux/centos/docker-ce.repo
  8. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  9. sudo yum install docker-ce
  10. sudo systemctl start docker
  11. #阿里云镜像加速,https://www.aliyun.com/
  12. 产品-容器-ACR-管理控制台-镜像加速器-centos-具体命令
  13. #安装mysql,把mysql文件夹直接复制到root目录下
  14. docker network create hm-net
  15. vi /etc/resolv.conf
  16. nameserver 223.5.5.5//改不是添加
  17. docker run -d \
  18. --name mysql \
  19. -p 3306:3306 \
  20. -e TZ=Asia/Shanghai \
  21. -e MYSQL_ROOT_PASSWORD=123 \
  22. -v /root/mysql/data:/var/lib/mysql \
  23. -v /root/mysql/conf:/etc/mysql/conf.d \
  24. -v /root/mysql/init:/docker-entrypoint-initdb.d \
  25. --network hm-net\
  26. mysql
  27. #安装nginx,把nginx直接复制到root目录下
  28. docker run -d \
  29. --name nginx \
  30. -p 18080:18080 \
  31. -p 18081:18081 \
  32. -v /root/nginx/html:/usr/share/nginx/html \
  33. -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  34. --network hm-net\
  35. nginx
  36. #idea后端
  37. 1)运行和编译都确定是jdk11和sdk11,active profile=local(hmall、hm-common、hmall-service)
  38. 2)application.yaml替换一下虚拟机的ip地址
  39. 3)去掉测试,maven中'skip test',点击hmal-lifecycle-package【如果报错了,就lombok改为1.18.30】,在hm-service文件夹中出现target目录,把hm-service/Dockerfile和hm-service/target/hm-service.jar复制到虚拟机的root目录下
  40. #一键部署,docker-compose.yml文件复制到root目录下,不用指定目录
  41. docker compose up -d
  42. docker compose down
  43. #前端
  44. idea:springboot运行

三、单体拆分为微服务,maven聚合多个module

  1. #item-service【全从hm-service拷贝】
  2. i.依赖pom.xml:从hm-service/pom.xml中复制,删掉登录所需的“加密”,父工程已经引用的“单元测试”,暂时不确定需不需要的“redis”【需要再添】,然后点右上角的load maven
  3. ii.创建包和启动类:
  4. 1.java/:新建包“com.hmall.item”
  5. 2.com.hmall.item/:拷贝“HMallApplication”到包中为“ItemApplication”,并且修改其中的类名Class和扫描包MapperScan
  6. 3.com.hmall.item/:创建包mapper,service.controller,domain
  7. 4.java/resoureces/:配置文件从hm-service中拷贝三个,dev和local不用改
  8. 修改“application.yaml”【port: 8081,name: item-service,3306/hm-item?,
  9. 黑马商城商品管理接口文档,api-rule-resources:-
  10. com.hmall.item.controller】,删除最后登录用户加密部分
  11. (hm:jwt...,auth...)
  12. 5.具体代码:拷贝顺序,最后——controller依赖service依赖mapper依赖domain——最先
  13. i.四个包:有的全拷贝过来,数据传输对象dto,前端的表单提交和服务的交互。
  14. ii.mapper:报错修改,根据报错再把缺的代码拷贝一下
  15. iii.service:impl包中有个不会报错但要修改的地方,String sqlStatement =
  16. "com.hmall.item.mapper...."
  1. #cart-service
  2. 大体步骤跟item一样,1-4可以从item拷贝,省去筛选的过程
  3. 1.CartServiceImpl:购物车功能依赖于商品查询功能,
  4. 需要注入这个功能:查询购物车的时候不仅查询购物车的信息,
  5. 还要查询最新的价格和状态信息,可以提醒用户价格更便宜。
  6. 但是微服务拆分要实现单一职责,所以这部分是无法查询商品的数据库的。
  7. 先隐藏这部分的报错,进行运行测试,后面再处理

如何解决服务拆分后数据和服务隔离,无法进行本地调用,要去查询别的服务的数据库?网络调用

如何通过Java代码从一个服务向另一个服务发起网络请求查询数据?

例:前端向后端发起网络请求获得数据,发起http请求
具体实现:API,RestTemplate-exchange,可以把返回的Jason反序列化成Java。
先去掉第三张图的注释,复制ItemDTO代码到cart包中

#在启动类中写配置
public RestTemplate restTemplate(){
        return  new RestTemplate();
    }
#CartServiceImpl

RestTemplate-exchange缺点:
在服务较少时,还可以使用,但是为了满足实际中更高的并发请求压力,将一个服务部署多份,创建多个容器同时启动同时接收,形成负载均衡的集群,多实例部署
解决:注册中心技术,服务治理,开源的注册中心组件Nacos

nacos启动时报错:No DataSource set,先删掉容器,重新运行

查询商品部分代码,由于商品在另一个微服务,查询的时候只能远程调用查询,又因为不写死ip,就需要拉取服务实现服务,所以代码中需要根据服务名称获取服务实例列表,然后对列表做负载均衡挑出具体实例,然后去发送请求,最后解析结果。

优化1:相比于单体架构,跨服务代码复杂,可以通过OpenFeign连接池优化解决,OpenFeign声明式的http客户端。

优化2:当其他服务需要调用同一个服务时,都需要写一个服务接口,这算是重复编写,并且如果这个服务发生变化,意味着调用这个服务的其他服务也需要变化,为了避免重复编写和重复修改。

拆分trade-service:

OrderServiceImpl报错:.OrderServiceImpl不是抽象的, 并且未覆盖com.hmall.trade.service.IOrderService中的抽象方法markOrderPaySuccess(java.lang.Long)

解决:

  1. @Override
  2. public void markOrderPaySuccess(Long orderId) {
  3. Order order=new Order();
  4. order.setId(orderId);
  5. order.setStatus(2);
  6. order.setPayTime(LocalDateTime.now());
  7. updateById(order);
  8. }

直至拆分完成,面临两个主要问题:1.服务地址过多,而且将来可能变化,前端不知道该请求谁。2.每个服务都可能需要登录用户信息,如果各自去做登录校验,不仅麻烦还会有泄露秘钥的风险。

解决这些问题:网关,请求路由转发和身份校验,是微服务开发必不可少的组件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/965290
推荐阅读
相关标签
  

闽ICP备14008679号