当前位置: 首页 > 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.xdnf.cn/news/1151245.html

相关文章:

  • LangGraph是一个基于图计算的大语言模型应用开发框架
  • 敏感词 v0.27.0 新特性之词库独立拆分
  • 数字图像处理(三:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
  • 《计算机网络》实验报告二 IP协议分析
  • leetcode3_435 and 605
  • 【Linux服务器】-zabbix通过proxy进行分级监控
  • 子线程不能直接 new Handler(),而主线程可以
  • sql练习二
  • 打靶日记之xss-labs
  • OpenCV 官翻 4 - 相机标定与三维重建
  • 如何设计一个软件项目管理系统:架构设计合集(六)
  • 小明记账簿焕新记:从单色到多彩的主题进化之路
  • Java并发8--并发安全容器详解
  • Springboot项目的搭建方式5种
  • Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固
  • day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II
  • LVS(Linux virual server)
  • windows内核研究(驱动开发-0环与3环的通信)
  • Kotlin泛型约束
  • 多表查询-8-练习总结
  • 数据库练习3
  • Flowable31动态表单-----------------------终章
  • 博图SCL语言中常用运算符使用详解及实战案例(下)
  • OpenCV 官翻 3 - 特征检测 Feature Detection
  • 【无标题】重点阅读——如何在信息层面区分和表征卷曲维度,解析黑洞内部的维度区分机制
  • 《命令行参数与环境变量:从使用到原理的全方位解析》
  • 搭建比分网服务器怎么选数据不会卡顿?
  • lvs原理及实战部署
  • 【I2C】01.I2C硬件连接I2C总线时序图讲解
  • Go语言pprof性能分析指南