首页 > 其他分享 >项目内部调用的远程接口开发

项目内部调用的远程接口开发

时间:2024-09-14 16:52:09浏览次数:12  
标签:调用 服务 接口 api import 远程

编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。

  1. 项目内部的远程接口统一放在api工程

  2. 首先进入api编写接口,注意使用@FeignClient注解

  3. 进入服务提供者微服务,编写接口实现类

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 {

    @Resource
    private 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 {

    @Resource
    private UserServiceClient userServiceClient;

    // 通过 UserServiceClient 调用远程的用户服务
    public User getUserInfo(Long userId) {
        // 调用 api 中定义的远程服务接口
        return userServiceClient.getUserById(userId);
    }
}

4. 为什么要专门写一个内部调用的远程接口

  • 解耦代码:将远程调用的接口统一放在 api 工程中,方便管理,并且消费者只需调用该接口,不需要关心具体的实现逻辑。这保证了服务间的低耦合。

  • 代码复用:通过 Feign 客户端,接口声明可以在多个微服务中复用,而无需为每个服务编写重复的 HTTP 请求逻辑。

  • 简化开发:Feign 提供了声明式的调用方式,极大简化了与远程服务交互时的代码开发。无需手动编写 HTTP 请求、解析响应等,降低了代码的复杂度。

  • 便于维护:如果需要对远程接口进行修改或维护,只需修改 api 中的接口定义,其他服务可以自动应用这些变化,减少了重复修改的风险。

  • 安全性:内部调用的接口通常并不希望直接暴露给外部用户或前端。这是因为:

    • 内部接口往往传输的内容更加敏感,涉及内部系统之间的数据交换。
    • 前端接口通常需要经过鉴权、校验、限流等多层保护,而内部接口可以简化这些流程,避免不必要的开销。

标签:调用,服务,接口,api,import,远程
From: https://blog.csdn.net/qq_46637011/article/details/142259875

相关文章

  • 合宙Air201模组LuatOS:远程控制
    很多小伙伴已经学习了前两期教程helloworld、点灯,对合宙Air201这款低功耗资产定位模组的LuatOS开发已有一定了解,大家的实操反馈是:真的很简单!那么,这一期我们要一起体验更有趣的——远程控制点灯!Air201远程控制点灯教程  合宙Air201资产定位模组——是一个集成超低功耗4G通信、语......
  • 记一次SSH无法远程
    故障现象主机无法使用ssh远程输入密码之后报错如下#Permissiondenied(password,keyboard-interactive).原因看起来好像是远端设置了不允许用户名和密码登录其实是客户端设置问题修复或者注释#ChallengeResponseAuthenticationno......
  • 使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用
    简介在现代微服务架构中,服务发现(ServiceDiscovery)是一项关键功能。它允许微服务动态地找到彼此,而无需依赖硬编码的地址。以前如果你搜.NETServiceDiscovery,大概率会搜到一大堆Eureka,Consul等的文章。现在微软为我们带来了一个官方的包:Microsoft.Extensions.ServiceDiscovery......
  • windows@共享网络共享打印机@局域网内远程调用打印机打印
    文章目录abstract流程简述预备工作启动服务......
  • PbootCMS常用公司信息标签调用
    以下是PbootCMS常用公司信息标签的表格形式,方便查阅和使用:标签名描述示例代码{pboot:companyname}公司名称{pboot:companyname}{pboot:companyaddress}公司地址{pboot:companyaddress}{pboot:companypostcode}邮政编码{pboot:companypostcode}{pboot:......
  • Ubuntu系统Docker部署数据库管理工具DbGate并实现远程查询数据
    文章目录前言1.安装Docker2.使用Docker拉取DbGate镜像3.创建并启动DbGate容器4.本地连接测试5.公网远程访问本地DbGate容器5.1内网穿透工具安装5.2创建远程连接公网地址5.3使用固定公网地址远程访问前言本文主要介绍如何在LinuxUbuntu系统中使用Docker部......
  • PbootCMS栏目页如何调用当前栏目的文章
    要在栏目页调用当前栏目的文章,可以使用PbootCMS提供的 {pboot:list} 标签。以下是如何在栏目页调用当前栏目的文章的具体方法。1.栏目页调用当前栏目的文章假设你需要在栏目页调用当前栏目的文章,可以使用以下代码:{pboot:listnum=10scode={sort:scode}page=0}<li>......
  • PbootCMS公共标签调用
    可以在PbootCMS中实现多种数据处理和展示功能,使页面更加美观且功能丰富。具体使用方法如下:模板文件嵌套引用:使用 {includefile=***.html}。时间格式化标签:使用 [list:datestyle=Y-m-d] 或 {content:datestyle=Y-m-d}。HTML去除标签:使用 [list:contentdrophtml=1]......
  • PbootCMS分页条标签怎么调用
    在PbootCMS中,可以通过特定的标签来输出分页条。这些标签适用于所有执行了分页的页面。以下是详细的使用方法和示例:1.分页条标签{page:bar}<!--系统内置的完整分页条-->{page:current}<!--当前页码-->{page:count}<!--总页数-->{page:rows}<!--总数据行数......
  • PbootCMS友情链接怎么调用
    在PBootCMS中,使用友情链接列表标签可以方便地在全站任意位置调用指定分组的友情链接。以下是如何使用该标签的具体步骤和示例代码。1.友情链接列表基本用法html {pboot:linkgid=*num=*}<ahref="[link:link]"title="[link:name]"><imgsrc="[link:logo]"></a>......