当前位置: 首页 > news >正文

【黑马SpringCloud微服务开发与实战】(三)微服务01

1.导入黑马商城

在这里插入图片描述
安装Mysql
配置那些文档有:https://b11et3un53m.feishu.cn/wiki/R4Sdwvo8Si4kilkSKfscgQX0niB

不好配docker镜像源的可以dd博主,这里不太好方便贴教程。

配置后端,文件里面记得修改自己的虚拟机地址

在这里插入图片描述

http://localhost:8080/hi
在这里插入图片描述

配置前端:启动nginx.exe就行 打开cmd窗口 start nginx.exe在这里插入图片描述

此时:http://localhost:18080/ 进去看看

在这里插入图片描述
登录,输入账号密码即可,和视频一样 (jkd要11)

在这里插入图片描述

2. 单体架构

3. 微服务架构

在这里插入图片描述

4. SpringCloud

在这里插入图片描述
在这里插入图片描述

5. 熟悉黑马商城

在这里插入图片描述
在这里插入图片描述

6. 拆分原则

在这里插入图片描述
在这里插入图片描述

7. 微服务项目结构说明

在这里插入图片描述
在这里插入图片描述

8. 拆分商品服务

在这里插入图片描述
复制依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>hmall</artifactId><groupId>com.heima</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>item-service</artifactId><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><!--common--><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

复制配置文件,新建数据库

server:port: 8081
spring:application:name: item-serviceprofiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3306/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
knife4j:enable: trueopenapi:title: 黑马商品接口文档description: "黑马商品接口文档"email: zhanghuyi@itcast.cnconcat: 虎哥url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- com.hmall.item.controller# keytool -genkeypair -alias hmall -keyalg RSA -keypass hmall123 -keystore hmall.jks -storepass hmall123

复制相关层的代码

在这里插入图片描述
启动测试:
在这里插入图片描述

9. 拆分购物车服务

同8.拆分类似,有几处跟着视频注释就行。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>hmall</artifactId><groupId>com.heima</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cart-service</artifactId><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><!--common--><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server:port: 8082
spring:application:name: cart-serviceprofiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3306/hm-cart?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
knife4j:enable: trueopenapi:title: 黑马购物车接口文档description: "黑马购物车接口文档"email: zhanghuyi@itcast.cnconcat: 虎哥url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- com.hmall.cart.controller# keytool -genkeypair -alias hmall -keyalg RSA -keypass hmall123 -keystore hmall.jks -storepass hmall123

在这里插入图片描述

10. 微服务远程调用

在这里插入图片描述
在这里插入图片描述

@MapperScan("com.hmall.cart.mapper")
@SpringBootApplication
public class  CartApplication {public static void main(String[] args) {SpringApplication.run(CartApplication.class, args);}@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

需要配合@RequiredArgsConstructor一起食用

private final RestTemplate restTemplate;// 2.查询商品
//        List<ItemDTO> items = itemService.queryItemByIds(itemIds);
ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:8081/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtils.join(itemIds, ","))
);
if(!response.getStatusCode().is2xxSuccessful()){return;
}
List<ItemDTO> items = response.getBody();

在这里插入图片描述
在这里插入图片描述

11. 微服务注册中心原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12. 搭建nacos注册中心

运行执行nacos.sql文件

修改.env文件

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.10.100
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

在这里插入图片描述
我把两个文件移动到根目录下,因为之前弄过其他nacos,因此创建一个nacos1用于存放

在这里插入图片描述
在这里插入图片描述

docker run -d \
--name nacos1 \
--env-file ./nacos/custom.env \
-p 8858:8848 \
-p 9858:9848 \
-p 9859:9849 \
--restart=always \
nacos/nacos-server:v2.1.0-slim

因为博主已经有了一个nacos,所以给命名为nacos1、主机也需要更改,如果你们没配置和视频保持一致就行。

在这里插入图片描述

docker logs -f nacos1

在这里插入图片描述
在这里插入图片描述
http://192.168.10.100:8858/nacos/#/login

注意了,这里因为我映射的是8858,你们的依旧是8848。因为我的8848主机端口配置了另一个nacos

账号密码都是:nacos

在这里插入图片描述

13. 服务注册

在这里插入图片描述

<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:application:name: item-serviceprofiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3306/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}cloud:nacos:discovery:server-addr: 192.168.10.100:8858

配置多个实例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

14. 服务发现和负载均衡

在这里插入图片描述

        List<ServiceInstance> instances = discoveryClient.getInstances("item-service");if(CollUtils.isEmpty(instances)){return;}ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(serviceInstance.getUri() + "/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtils.join(itemIds, ",")));

15. openFeign快速入门

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
启动类加注解.

  <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
@FeignClient("item-service")
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
    private void handleCartItems(List<CartVO> vos) {// 1.获取商品idSet<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());// 2.查询商品
//        List<ItemDTO> items = itemService.queryItemByIds(itemIds);
//        List<ServiceInstance> instances = discoveryClient.getInstances("item-service");
//        if(CollUtils.isEmpty(instances)){
//            return;
//        }
//        ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));
//
//
//        ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
//                serviceInstance.getUri() + "/items?ids={ids}",
//                HttpMethod.GET,
//                null,
//                new ParameterizedTypeReference<List<ItemDTO>>() {
//                },
//                Map.of("ids", CollUtils.join(itemIds, ","))
//        );
//        if(!response.getStatusCode().is2xxSuccessful()){
//            return;
//        }
//        List<ItemDTO> items = response.getBody();List<ItemDTO> items = itemClient.queryItemByIds(itemIds);if (CollUtils.isEmpty(items)) {return;}// 3.转为 id 到 item的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.写入vofor (CartVO v : vos) {ItemDTO item = itemMap.get(v.getItemId());if (item == null) {continue;}v.setNewPrice(item.getPrice());v.setStatus(item.getStatus());v.setStock(item.getStock());}}

16. 连接池

在这里插入图片描述
在这里插入图片描述

<!--OK http 的依赖 -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId>
</dependency>
feign:okhttp:enabled: true # 开启OKHttp功能

16. 最佳实践

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>hmall</artifactId><groupId>com.heima</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>hm-api</artifactId><dependencies><!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.6.6</version><scope>compile</scope></dependency></dependencies><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties></project>

在这里插入图片描述

16. 日志输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到此为止->01结束

后面的作用内容大家可以自己动手实现,博主会在下一个章节单独列出.,…加油

http://www.dtcms.com/a/287184.html

相关文章:

  • 快速上手AI整合包!GPT-SoVITS-v2打包教程,解锁AIStarter应用市场潜力
  • freertos任务调度关键函数理解
  • 笔试强训——第一周
  • 标准文件和系统文件I/O
  • 鸿蒙与web混合开发双向通信
  • 云服务器磁盘IO性能优化的测试与配置方法
  • docker|Linux|以centos基础镜像为基础制作nmap专用镜像(镜像瘦身计划)
  • SQL基础操作指南:约束、表设计与复杂查询
  • 【RK3576】【Android14】USB开发调试
  • install_arm_docker.sh
  • 【Qt开发】Qt的背景介绍(三)-> 认识Qt Creator
  • python网络爬虫之selenium库(二)
  • Android回调机制入门
  • 工程图矢量化 笔记 | potrace ezdxf svgpathtools | png转svg保存dxf用matplotlib画出来
  • 基于springboot的考研互助小程序
  • Redis的持久化-RDB
  • 【橘子分布式】gRPC(编程篇-中)
  • 基于开放API接口采集的定制开发开源AI智能名片S2B2C商城小程序数据整合与增长策略研究
  • 通过phpStudy,用nginx部署vue项目,支持部署多套vue项目(详细教程)
  • LLM 的Top-P参数 是在LLM中的每一层发挥作用,还是最后一层?
  • CSS-in-JSVue的解决方案
  • 将HTML+JS+CSS数独游戏包装为安卓App
  • 前端-CSS-day6
  • 从零开始学Tailwind CSS : 颜色配置原理与实践
  • Django3 - Web前端开发基础 HTML、CSS和JavaScript
  • 【爬虫】04 - 高级数据存储
  • VLA--Gemini_Robotics: 论文阅读 -- 直接控制机器人的视觉-语言-动作(VLA)模型
  • 如何理解华为横向虚拟化CSS+iStack
  • Attu-Milvus向量数据库可视化工具
  • [牛客2020提高赛前集训营day3] 牛半仙的魔塔