OpenFeign内部调用二
4.修改各业务服务的调用代码为feignClient
开启nacos注册 把Client变成bean
该服务仅内部调用,不是给前端的
将某个服务标记为“内部调用”的目的主要有以下几个方面:
-
安全性: 内部API通常不对外部用户公开,这样可以防止未授权的访问。通过限制只允许内部服务调用,可以降低潜在的安全风险。
-
服务架构: 在微服务架构中,服务之间的通信往往是通过内部API进行的。这种设计使得各个服务能相互协作,同时避免了直接暴露给外部的复杂性。
-
性能优化: 内部调用通常可以优化网络请求,例如使用轻量级的通信协议(如gRPC或HTTP/2),而不是传统的RESTful API,这样可以提高性能。
-
版本控制: 内部API可以独立于外部API进行版本控制,使得内部服务能够在不影响外部用户的情况下进行更新和迭代。
-
简化开发: 开发人员可以在内部API中使用更复杂的逻辑和数据结构,而不需要考虑外部用户的兼容性问题。
-
监控与日志: 内部调用可以更方便地进行监控和日志记录,以便于分析和调试内部服务之间的交互。
通过这些措施,可以确保系统的稳定性和安全性,同时提升开发效率和服务可维护性。
编写服务的实现类 注意要和之前定义的客户端保持一致
这服务只是内部调用的
package com.yupi.yuojbackenduserservice.controller.inner;import com.yupi.yuojbackendmodel.model.entity.User;
import com.yupi.yuojbackendserviceclient.service.UserFeignClient;
import com.yupi.yuojbackenduserservice.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;/*** 该服务仅内部调用,不是给前端的*/
@RestController
@RequestMapping("/inner")
public class UserInnerController implements UserFeignClient {@Resourceprivate UserService userService;/*** 根据 id 获取用户* @param userId* @return*/@Override@GetMapping("/get/id")public User getById(@RequestParam("userId") long userId) {return userService.getById(userId);}/*** 根据 id 获取用户列表* @param idList* @return*/@Override@GetMapping("/get/ids")public List<User> listByIds(@RequestParam("idList") Collection<Long> idList) {return userService.listByIds(idList);}}
什么时候用Client呢
5.开启nacos的配置 让服务互相发现
注册配置中心
现在所有服务引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
每个服务都配置一下
是针对 Spring Cloud 使用 Nacos 作为服务发现的设置
spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848
给项目启动类打上注解
开启服务发现
找到对应客户端Bean的位置
这边建议的是给每个服务都加上
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.yupi.yuojbackendserviceclient.service"})
全局要引入负载均衡器依赖
主要功能包括:
-
客户端负载均衡:根据策略(如轮询、随机等)将请求分发到不同的服务实例。
-
与 Spring Cloud 生态系统的集成:可以与其他 Spring Cloud 组件(如 Eureka、Consul 等)一起使用,以实现服务发现和负载均衡。
-
自定义负载均衡策略:支持用户定义自己的负载均衡算法。
使用场景:
-
在微服务架构中,多个服务实例提供相同的功能时,可以通过负载均衡器将请求合理分配到这些实例上,以提高可用性和性能。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId><version>3.1.5</version></dependency>