第一天项目熟悉hm-common用来存放使用到的工具包hm-service: 整个单体项目大差不差配置层控制层实体mapper接口业务逻辑配置文件微服务架构认识个人理解微服务是一个架构思想通过Spring Cloud框架去实现技术。简单来说就是一个单体项目随着业务的发展会不断扩增项目功能这样会造成性能下降。微服务是将一个单体项目中的各个模块功能拆开每一个模块相互独立分别部署这样不会因为某个模块的压力影响到另一个模块的功能使用提高整体项目的性能。如何对项目的拆分以黑马商城为例黑马商城有五个模块登录搜索商品购物车下单支付。我们可以按照模块功能拆分只要能保证每一个服务能够完整的完成一个模块功能就行。拆分商品服务和购物车根据controller层我们找出商品服务有关的类ItemController然后根据controller —— service —— mapper —— domain 这条链路找到所有有关商品的类或接口抽离出来放到新建maven项目里同理购物车服务也是如此。服务之间如何调用我们可以想想前端是如何获取数据的前端就是通过接口加上参数与后端连接获取数据。所以服务之间也是通过网络请求相互通信的。这里用到 Spring 的 RestTemplate去实现利用它我们可以实现后端程序发送网络请求。我们先注册Bean:这里推荐通过构造注入依赖然后通过 exchange 方法就可以发起请求了给购物车服务RestTemplate 模板 T ResponseEntityT exchange( String url, // 请求地址 HttpMethod method, // 请求方法GET, POST等 HttpEntity? requestEntity, // 请求实体包含请求头和请求体GET时通常为null ParameterizedTypeReferenceT responseType, // 响应类型用于处理泛型 MapString, ? uriVariables // URL中的路径变量参数 )购物车中能查到商品的最新价格了总之微服务之间远程调用称为RPCRPC实现又基于Http协议。Http方式这种方式不关心服务提供者的具体技术实现只要对外暴露Http接口即可。Java发送http请求可以使用Spring提供的RestTemplate使用的基本步骤如下注册RestTemplate到Spring容器调用RestTemplate的API发送请求常见方法有getForObject发送Get请求并返回指定类型对象PostForObject发送Post请求并返回指定类型对象put发送PUT请求delete发送Delete请求exchange发送任意类型请求返回ResponseEntity服务注册和发现通过远程调用我们实现的服务之间的通信但是如果item-service服务部署了多个实例cart-service如何知道这些实例的地址或如何调用这些实例所以我们引入了nacos注册中心。什么是注册中心我们要清楚一个概念服务调用者和服务提供者。服务调用者调用其它服务的实例服务提供者给其它服务调用的实例注册中心就是管理服务调用和提供它内部管理了所有服务提供者的地址服务调用者调用服务时会根据服务名在注册中心中筛选出地址然后根据负载均衡算法就能远程调用。此外每一个服务调用者会发送心跳给注册中心注册中心以此来判断部署实例是否有宕机然后在第一时间发送给服务调用者这样服务调用者就知道自己获取到的地址是否能正常使用。nacos注册服务不论是服务调用者还是服务提供者都需要引入依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency配置nacos地址spring:application:name: item-service # 服务名称cloud:nacos: server-addr: 192.168.150.101:8848 # nacos地址spring:cloud:nacos:server-addr: 192.168.150.101:8848完成依赖引入和配置后启动服务它们就会自动注册到 Nacos 注册中心。发现调用服务这里思路是通过实例名获取服务列表通过负载均衡算法调用某一个服务这里就随机调用了注入 discoveryClient依赖动态拼接调用地址更灵活不用写死后续打算边学边更等学完看能不能扩展项目引入redisRabbitMQ等中间件。