python 做网站开发吗,物流网站建设规划书,建设网站费用如何入账,郑州官方最新通告编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中#xff0c;实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用#xff0c;而不是直接暴露给外部用户或前端。 项目内部的远程接口统一放在api工程 首先进入api编写接口#x…编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用而不是直接暴露给外部用户或前端。 项目内部的远程接口统一放在api工程 首先进入api编写接口注意使用FeignClient注解 进入服务提供者微服务编写接口实现类
1. 在 api 工程中编写接口
在 api 工程中定义远程调用的接口。这个接口将通过 Feign 进行服务调用。接口通过 FeignClient 注解进行标注指定服务名称和请求的路径。
package com.jzo2o.api.user;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;// 通过 FeignClient 指定远程服务的名称 user-service
FeignClient(name user-service, path /user/api/users)
public interface UserServiceClient {// 定义要调用的远程服务的接口GetMapping 表示通过 GET 方法访问GetMapping(/{id})User getUserById(PathVariable(id) Long id);
}FeignClient表示这是一个 Feign 客户端name 为服务提供者的名称url 指定服务的地址可省略使用服务发现时。GetMapping(/api/users/{id})声明需要调用的接口路径。
此接口只定义远程调用的方法不需要具体实现Feign 会自动为它生成代理类。
2. 在服务提供者微服务中编写接口实现类
在服务提供者即实际提供业务功能的微服务中编写接口的实现类来处理请求。
服务提供者UserService 微服务
在服务提供者的微服务中实现接口逻辑。比如处理用户的查询接口。
package com.jzo2o.user.controller;import org.springframework.web.bind.annotation.*;
import com.jzo2o.user.model.User;
import com.jzo2o.user.service.UserService;
import javax.annotation.Resource;RestController
RequestMapping(/api/users)
public class UserController {Resourceprivate UserService userService;// 实现查询用户的接口GetMapping(/{id})public User getUserById(PathVariable(id) Long id) {// 调用业务层的方法处理查询用户的逻辑return userService.findUserById(id);}
}3. 在服务消费者微服务中调用远程接口
在服务消费者中即调用方微服务你可以通过 Feign 客户端直接调用刚才定义的接口而不需要自己处理 HTTP 请求的逻辑。
服务消费者调用 UserServiceClient 接口
在需要调用用户服务的地方注入 UserServiceClient 并进行调用
package com.jzo2o.order.service;import com.jzo2o.api.user.UserServiceClient;
import com.jzo2o.api.user.User;
import org.springframework.stereotype.Service;import javax.annotation.Resource;Service
public class OrderService {Resourceprivate UserServiceClient userServiceClient;// 通过 UserServiceClient 调用远程的用户服务public User getUserInfo(Long userId) {// 调用 api 中定义的远程服务接口return userServiceClient.getUserById(userId);}
}4. 为什么要专门写一个内部调用的远程接口 解耦代码将远程调用的接口统一放在 api 工程中方便管理并且消费者只需调用该接口不需要关心具体的实现逻辑。这保证了服务间的低耦合。 代码复用通过 Feign 客户端接口声明可以在多个微服务中复用而无需为每个服务编写重复的 HTTP 请求逻辑。 简化开发Feign 提供了声明式的调用方式极大简化了与远程服务交互时的代码开发。无需手动编写 HTTP 请求、解析响应等降低了代码的复杂度。 便于维护如果需要对远程接口进行修改或维护只需修改 api 中的接口定义其他服务可以自动应用这些变化减少了重复修改的风险。 安全性内部调用的接口通常并不希望直接暴露给外部用户或前端。这是因为 内部接口往往传输的内容更加敏感涉及内部系统之间的数据交换。前端接口通常需要经过鉴权、校验、限流等多层保护而内部接口可以简化这些流程避免不必要的开销。