超简单,从原理到实战|spring cloud 服务调用(feign实现)

SpringCloud实战【九】: SpringCloud服务间调用 1 服务间调用 微服务的特点是服务数量特别多,服务和服务之间也需要有交互,这就涉及到服务间的调用,即服务与服务之间如何通信。提到服务与服务之间的通信,最通用的莫过于HttpClient,在其它的通信架构中基本都使用HttpClient来作为底层的通讯模型。在SpringCloud中依然可以使用HttpClient进行服务与服务调用,只不过如果采用HttpClient调用的话,会有一些弊端,例如: 如果同一个服务有多个负载的话,采用HttpClient调用时,没有办法处理负载均衡的问题。还有... 阅读详情

Spring Cloud微服务解决方案概览

Spring Cloud是为了解决在构建面向终端消费者的应用软件时遇到的诸多挑战而设计的一套微服务解决方案。它通过提供一系列工具和库,帮助开发者创建具有高可用性、稳定性的后端服务,并促进团队间的高效协作。当一个应用逐渐成长壮大,开发团队规模也随之扩大时,采用Spring Cloud进行服务化改造变得尤为重要。通过将原本单一庞大的应用拆分为多个小而专的服务(即微服务架构),每个服务都围绕特定业务功能构建,这样不仅提高了系统的灵活性与可维护性,也使得各个服务间实现了高内聚低耦合的理想状态。

例如,在一家电商公司里,随着业务快速发展,其在线购物平台需要支持更复杂的交易流程、更高的并发访问量等需求。此时,可以使用Spring Cloud来重构现有系统,将订单处理、库存管理、支付接口等功能分别部署为独立的服务。这样一来,不仅方便了不同开发小组专注于各自负责的部分,同时也让整个系统变得更加健壮——即使某个服务出现故障,也不会影响到其他正常运行的服务。此外,借助于Spring Cloud提供的诸如服务发现、负载均衡等功能,还可以轻松实现跨服务之间的调用,确保用户能够获得流畅且可靠的购物体验。

Spring Cloud Alibaba概述

spring cloud alibaba是Spring Cloud目前最佳的本地化解决方案,它集成了阿里巴巴在Java应用开发领域的多年经验,为业务的持续发展提供了强有力的保障。以下是其主要组件的简要介绍:

  • 服务发现与配置中心 - Nacos:提供动态服务发现、配置管理等功能。
  • 分布式事务 - Seata:支持分布式事务处理,保证数据一致性。
  • 限流降级 - Sentinel:实现流量控制、熔断降级等微服务治理功能。
  • 分布式消息 - RocketMQ:高性能、可靠的消息中间件,适用于大规模消息传递场景。
  • 同构服务调用 - Dubbo:一款高性能的RPC框架,用于构建大规模分布式系统。
  • AI集成 - Spring AI Alibaba:提供与通义千问等AI技术整合的能力。
  • 静态编译 - GraalVM:优化应用程序启动时间和运行时性能。
  • 日志分析框架 - iLogtail:高效的日志采集和传输工具。

这些组件共同构成了Spring Cloud Alibaba丰富且强大的生态系统,满足了构建现代云原生应用的各种需求。

Spring Cloud Alibaba中的Nacos服务调用示例

spring cloud alibaba服务调用实践

为了实现一次基于 Nacos 的 Spring Cloud Alibaba 远程服务调用,我们将通过以下步骤进行详细说明:

  1. 项目准备:确保你已经安装并运行了 Nacos 服务。
  2. 服务提供者配置:创建一个简单的服务提供者,并将其注册到 Nacos。
  3. 服务消费者配置:创建一个服务消费者,使用 Feign 或 RestTemplate 来消费服务提供者提供的服务。
1. 项目准备

确保你的本地环境已经安装并启动了 Nacos 服务。你可以从 Nacos 官方文档 获取更多关于如何安装和启动 Nacos 服务的信息。

2. 服务提供者配置
2.1 创建 Maven 项目

首先,创建一个新的 Maven 项目 service-provider,并在 pom.xml 中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2022.x.x</version>
    </dependency>
</dependencies>
2.2 配置文件

在 src/main/resources/application.properties 中添加以下配置:

spring.application.name=service-provider
server.port=18082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2.3 启用服务发现

在主类中启用服务发现功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }
}
2.4 创建 REST 接口

创建一个简单的 REST 接口用于测试:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EchoController {

    @GetMapping("/echo/{string}")
    public String echo(@PathVariable String string) {
        return "Hello, " + string;
    }
}
2.5 启动应用

启动 ServiceProviderApplication 类中的 main 方法,服务提供者将注册到 Nacos。

3. 服务消费者配置
3.1 创建 Maven 项目

创建一个新的 Maven 项目 service-consumer,并在 pom.xml 中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2022.x.x</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>
3.2 配置文件

在 src/main/resources/application.properties 中添加以下配置:

spring.application.name=service-consumer
server.port=18083
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.3 启用服务发现

在主类中启用服务发现功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}
3.4 定义 Feign 客户端

定义一个 Feign 客户端来调用服务提供者的接口:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "service-provider")
public interface EchoService {

    @GetMapping(value = "/echo/{str}")
    String echo(@PathVariable("str") String str);
}
3.5 创建控制器

创建一个控制器来调用 Feign 客户端:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private EchoService echoService;

    @GetMapping(value = "/echo-feign/{str}")
    public String feign(@PathVariable String str) {
        return echoService.echo(str);
    }
}
3.6 启动应用

启动 ServiceConsumerApplication 类中的 main 方法,服务消费者将连接到 Nacos 并调用服务提供者的服务。

4. 验证

启动服务提供者和服务消费者后,访问以下 URL 来验证服务调用是否成功:

  • 访问 http://127.0.0.1:18082/echo/hello 应该返回 Hello, hello。
  • 访问 http://127.0.0.1:18083/echo-feign/hello 应该返回 Hello, hello。

通过以上步骤,你已经成功地使用 Nacos 和 Spring Cloud Alibaba 实现了一次远程服务调用。这个过程包括了服务的注册、发现以及服务调用的具体实现。

Nacos服务器的安装与配置

Nacos server的安装和部署

为了实现服务发现功能,Nacos Server 是不可或缺的核心组件。在本例中,我们将以阿里云 MSE 的免费试用为例,详细说明如何部署 Nacos Server 以及将微服务应用注册到 Nacos 上。

第一步:准备环境和资源

准备专有网络VPC和交换机
  • 如果您已经有了VPC和交换机,并且您的微服务应用已经在该VPC内运行,请确保此VPC与后续创建的 Nacos 实例所选的VPC一致。
  • 若需要新建VPC和交换机,请参考创建和管理专有网络来完成设置。
开通微服务引擎注册配置 MSE Nacos
  1. 访问阿里云免费试用页面,登录或注册账号并完成必要的实名认证。
  2. 在产品类别中选择“中间件 > 微服务引擎”,然后点击“注册配置 MSE Nacos/ZooKeeper”卡片上的“立即试用”按钮。
  3. 配置实例:
    • 引擎类型选择 Nacos。
    • 指定实例名称。
    • 资源组通常使用默认值。
    • 根据您的实际情况选择网络类型(专有网络/公网网络),如果您的客户端既位于 VPC 内又需要通过公网访问,则选择专有网络并额外配置1 Mbps带宽。
    • 选择之前创建或已有的VPC及对应的交换机。
  4. 同意服务协议后点击“立即试用”以完成开通流程。
  5. 等待约 3 至 5 分钟让系统自动创建好实例,您可以在 注册配置中心实例列表页 查看实例状态,当状态变为“运行中”时即表示可以正常使用。

第二步:微服务应用部署及注册

将自行开发部署的微服务应用注册到MSE Nacos
  1. 登录至 注册配置中心控制台,找到刚创建的 Nacos 实例,在“访问方式”列获取其访问地址,形式为 mse.XX.nacos.mse.aliyuncs.com。
  2. 更新您的微服务应用配置文件中的注册中心地址为上述获得的地址,并重启应用。
    • 对于 Spring Cloud 应用,在 application.properties 或 application.yml 中添加如下行:
      spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
      
    • 如果是 Dubbo 应用,则需在 provider.xml 中指定注册中心地址:
      <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
      

第三步:验证服务注册成功

  1. 通过Shell命令查询Nacos中是否有新注册的服务节点。例如:
    curl http://mse.XX.nacos.mse.aliyuncs.com:8848/nacos/v1/ns/catalog/instances?serviceName=your-service-name&clusterName=DEFAULT&pageSize=10&pageNo=1&namespaceId=
    
    如果响应包含预期的服务信息,则表明服务已成功注册。
手把手,嘴对嘴教你Spring Cloud 微服务实战 -- Feign进行服务调用 通过前面的随笔,我们了解如何通过Spring Cloud ribbon进行负责均衡,如何通过Spring Cloud Hystrix进行服务断路保护,通过hystrix.command.<commandKey>.xxx进行指定配置,这里的<commandKey>可以为方法名。通过<client>.ribbon.<key>=<value>的方式进行指定服务配置,比如。通过hystrix.command.default.xxx进行全局配置。通过ribbon.<key>=<value>的方式进行全局配置,比如。 阅读详情

相关推荐

Spring Cloud Alibaba 基于Feign实现服务调用

前言:在Nacos Discovery中有提到,nacos提供了DiscoveryClient客户端,通过注入的方式,使用discoveryClient.getInstances.get(“instanceName”),指定实例名称,则可以获取该实例列表,拼接ulr来发送请求,这个方式对于开发则友好吗?当然不友好了,以及负载均衡如何实现? 对于服务之间的调用当然是通过rpc调用,要比我们自己手...

yxiumei的博客 1139

微服务之SpringCloud服务调用

主要是对于微服务学习中的服务调用这块的技术学习的总结,其中包含restTamplate和ribbon的调用方式总结,以及对ribbon轮询负载均衡规则的底层源码探索。最后也对openFeign进行服务调用做了一个简单的应用总结。

Young_深情不及里子的博客 3489

Spring Cloud微服务中的Feign:让服务调用像调用本地方法一样简单

name = "product-service", // 服务注册名fallback = ProductFallback.class // 熔断降级类“RestTemplate是微服务时代的’手写信’,Feign是’电子邮件’。—— 2023年Spring Cloud官方技术报告最终建议新项目直接用Feign(Spring Cloud 2023+默认推荐)旧项目迁移从RestTemplate → Feign(代码改动<20%)必须配置超时+熔断(Sentinel)生产环境必须配置和。

刘一说的IT专栏 1445

SpringCloud - 服务调用

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容

m0_66689823的博客 1966

SpringCloud 服务调用 spring-cloud-starter-openfeign

是一个用于声明式Web服务客户端(例如REST客户端)的启动器。它使得在Spring Cloud应用中调用其他HTTP服务变得非常简单,只需创建一个接口并使用注解来定义服务调用的细节。,你可以使用Spring的依赖注入来管理你的REST客户端,这使得服务间的通信变得非常简单和可维护。注解来指定服务ID(在Eureka或其他服务发现机制中使用的服务名称)。运行你的Spring Boot应用并测试服务调用是否正常工作。在你的服务类中,注入Feign客户端并使用它来调用远程服务。在Spring Cloud中,

IT深耕十余载,大道之简 1673

SpringCloud06—声明式服务调用:Spring Cloud Feign

在本节中,我们将通过一个简单的示例来展现Spring Cloud Feign在服务客户端定义上所带来的便利。下面的示例将继续使用之前我们实现的hello-service服务,这里我们会通过Spring Cloud Feign提供的声明式服务绑定功能来实现对该服务接口的调用。

2401_89323925的博客 858

Feign的最佳实践

Feign的最佳实践

chengxuyuan316的博客 1101

SpringCloud之Feign:SpringCloud微服务间的优雅调用利器!

Feign( pronounced as \fein\)是一个声明式的、模板化的HTTP客户端,它使得编写Web服务客户端变得更加容易。Feign是由Netflix开源的,旨在简化微服务之间的HTTP请求调用。在Spring Cloud中,Feign被广泛使用作为服务间调用的主要方式之一。Feign的核心思想是使用注解来定义客户端的HTTP请求,从而使得开发者能够像调用本地方法一样调用远程服务。它消除了编写冗长的HTTP客户端代码的需求,使得服务间的通信变得更加简洁和直观。声明式注解。

邓邓子的博客 2572

Spring Cloud从原理到实战之服务调用(feign实现)

采用基于 Spring Cloud 的微服务架构,可以将系统分解为一组小的、自治的服务,每个服务负责完成单一功能,并通过定义良好的接口与其他服务通信(即服务调用)。这种模式下,不仅增强了各个子服务之间的独立性,减少了相互间的影响,同时也促进了开发人员间的协作效率。

Grumpy_Amber的博客 2007

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud Feign 是一个基于注解的声明式 Web 服务框架,其核心底层源码主要依赖于 Netflix 的 Ribbon 和 Hystrix。在实际项目中,还可以根据需求配置 Ribbon 和 Hystrix,实现服务的负载均衡和熔断。这里使用了 Ribbon 的负载均衡,当调用该接口时,会自动选择一个可用的服务提供者进行调用。在客户端的控制器中,同样注入了 ServiceProviderFeignClient,并调用了其 sayHello 方法。

AI时代光年 3117

【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战

分布式系统下远程调用该如何选择?RestTemplate 与 Feign,Feign是最佳选择!

wanghuichen的博客 6441

Spring Cloud 服务调用 Feign

指定服务的名称,必须与服务注册中心中的名称一致。:声明调用远程服务的具体路径和方法。返回值与远程服务的响应格式一致。通过超时设置feign:client:config:default:日志级别配置日志打印级别,方便调试请求。Spring Cloud Feign 提供了高效优雅的服务调用方式,极大简化了微服务间的通信。通过合理的配置与扩展,开发者可以实现稳定、可靠的远程调用功能。结合熔断、重试与日志功能,Feign 能有效提升微服务的鲁棒性与可维护性。

Flying_Fish_roe的博客 1485

Java领域Spring Cloud Feign声明式服务调用

在当今的微服务架构中,服务之间的通信是至关重要的。Spring Cloud Feign作为一种声明式的HTTP客户端,为微服务之间的调用提供了一种更加简洁、高效的方式。本文的目的在于全面介绍Spring Cloud Feign的相关知识,包括其核心概念、原理、使用方法、实际应用场景等,帮助开发者深入理解和掌握Spring Cloud Feign,从而能够在实际项目中更好地运用它进行服务调用。本文的范围涵盖了从基础概念到项目实战,再到未来发展趋势等多个方面。

AI开发架构师 967

Spring Cloud Feign原理详解

目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring Cloud Feign 的使用 4.Spring Cloud Feign 的源码解析 1.什么是Feign? Feign 的初衷是:feign makes writing java...

时光钟摆 1万+

笔记汇总 | 斯坦福 CS229 机器学习

本文为斯坦福大学 2014 秋季 CS229 机器学习课程学习笔记本文主体部分转载自黄海广博士,文末已给出,大家有兴趣可以直接访问笔记首页,下载对应课程资料及作业代码。

ReturnTmp的博客 2461

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1576

Spring Cloud Feign 的远程服务调用

基于 Spring Cloud Feign 的远程服务调用说明创建项目 说明 项目运行的前提条件:服务注册中心已经启动。 本项目的服务注册与发现是基于 Spring Cloud Consul 实现。具体内容博主写在另一篇博客: Spring Cloud Consul 服务注册中心 本博客是 Spring Cloud 微服务化(精简完整版)的一部分。 创建项目 首先,这是一个 web 项...

Andy's Blog 2521

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

Spring Cloud Feign:声明式服务调用

Spring Cloud Feign:声明式服务调用

qq_35763697的博客 1986

GPU大规模集群运维

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的通用并行计算平台和程序模型,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。CUDA官方文档CUDA的软件环境允许开发者使用C++等高级编程语言开发程序。

weixin_42795092的博客 1736

python操作git推送自己分支并合并主分支(持续优化该工具)

python git

qq_44707265的博客 862

Spring Cloud: 服务调用 Ribbon、Feign 使用

Spring Cloud体系里应用比较广泛的服务调用方式有两种: 使用RestTemplate进行服务调用,使用Ribbon做负载均衡 使用Feign将服务声明,声明之后的服务可以像调用本地方法一样调用,Feign集成了Ribbon作为负载均衡 RestTemplate + Ribbon调用模式 RestTemplate介绍 RestTemplate是Spring Resources中一个访问第三方RESTful API接口的网络请求框架。 RestTemplate是用来消费REST服务的,所以Rest

泛泛之素 6464

实验四 基于IDEA+SpringBoot+Maven+Thymeleaf的系统实现实验目的

通过这次实验,我学习了如何成功进行IDEA+SpringBoot+maven的系统实现,搭建好IDEA+SpringBoot+maven的系统环境,成功地安装并配置了maven的运行环境,学会了创建springboot的三种方式,并且能将之前的实验结合起来运用。pom.xml中引入thymeleaf依赖,在classpath:/templates/下新建HTML页面(可采用实验一创建的页面),新建controller进行测试,访问页面后返回success成功数据。同时掌握和thymeleaf的基本语法。

m0_73502929的博客 1379

[Spring Cloud 项目] Spring cloud 实现房源查询功能

这个项目的功能很简单只涉及了查询功能,这个项目的的目的是熟悉SpringCloud框架,明白服务与服务之间的调用是通过http请求完成的使用微服务的架构而Feign可以使其像调用本地方法一样,学会在其他模块调用另一模块的服务和内容,完成负载均衡,学会将不同端口注册到eureka ,了解网关并会配置网关和使用断路器。

weixin_57169969的博客 3898

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 997

在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

一、    在我使用rosdep install teb_local_planner去安装teb_local_planner的时候,报错:Command ‘rosdep’ not found, but can be installed with:sudo apt install python3-rosdep2    我花大半个月好不容易建立起的一系列ROS环境,被python3-rosdep2这条万恶的语句连同ROS一起给我删了。。。悲伤来的那么猝不及防    随着ROS版本的迭代,相关资料很多都不再适用

慕羽★的博客 3805
上一篇: spring cloud 服务调用学习笔记(含最佳实践代码)feign实现
下一篇: Spring Cloud从原理到实战之服务调用(feign实现)
AIGC绘画
博客等级 码龄5年 316粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值