黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1):https://developer.aliyun.com/article/1548644
服务注册
- 这里的discoveryClient是一个顶级接口,所有的服务注册中心都实现了这个接口
- instances.get这里是选择负载均衡算法
依赖导入报错问题 [ERROR] ‘dependencies.dependency.groupId’ for com.heima’:hm-service:jar with value ‘com.heima’’ does not match a valid id pattern. @ line 33, column 22
- 解决方案很简单,这是没有在本地找到项目依赖,将要关联的弄到本地就可以了
- 运行 成功解决
mvn clean install • 1
OpenFeign
- 原本想要在两个服务中调取请求需要做上面这么多事
- 现在只需要这几行代码
OpenFeign引入四步走
第一步:在pom文件中新增这些东西
<!--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>
第二步:添加开关
第三步:写客户端与实际代码
第四步:使用
OpenFeign优化
- 原本没有连接池 现在使用链接池,毫无疑问,使用链接池对性能的优化是巨大的
day03-微服务01 - 飞书云文档 (feishu.cn)
OpenFeign使用优化
优化方式一:
优化方式二:
- 需要在启动类的@Endble注解上加上扫描地址
OpenFeign日志
第一步:写一个返回日志级别方法
第二步:使用这个日志级别
- 上面标志表示 成功了
作业:trade客户端拆分思路
一:分析
- 原本cart-service需要item-service的购物车中数据,所以创建了item的openfeign客户端,而trade需要商品id(item),清理购物车库存(cart)这两个的数据,所以需要这两个的客户端
二:定位代码
- 经过如上图以后的分析,就能明确到底要做什么
三:开始创建client
1 商品id获取
@FeignClient("item-service") public interface ItemClient { @GetMapping("/items") List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids); }
类部分
@FeignClient("item-service")
:定义一个 Feign 客户端,服务名称为 item-service
,这个名称应该与服务注册中心(如 Nacos)中的服务名称一致。
public interface ItemClient
:声明一个接口,表示这个接口将包含远程服务的 API 方法。
方法部分
@GetMapping("/items")
:定义一个 GET 请求,映射到 item-service
服务的 /items
端点。
List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
:
- 方法名称
queryItemByIds
表示查询多个商品 ID 的信息。 - 参数
@RequestParam("ids") Collection<Long> ids
:使用@RequestParam
注解表示这是一个查询参数,参数名称为ids
,类型是Collection<Long>
。 - 返回类型
List<ItemDTO>
:方法返回一个ItemDTO
对象的列表。 - 这里可以看出,需求是一样的,因此直接用
2 购物车清空
一:阅读原本购物车代码
- 发现有一个批量删除的代码,那我们就用这个了
- 本方法没有返回值,所以得出的client代码如下
package com.hmall.api.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.Collection; @FeignClient("cart-service") public interface CartClient { @GetMapping("/carts") void deleteCartItemByIds(@RequestParam("ids") Collection<Long> ids); }
cartClient.deleteCartItemByIds(itemIds);
3 扣减缓存
- 发现扣减缓存代码
四:非拆分配置
- 分别是扫描和,和依赖使用
- 其他都一样了