微服务之间的调用

这篇具有很好参考价值的文章主要介绍了微服务之间的调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Nacos

Nacos 是一个开源的服务发现、配置管理和服务管理平台,主要用于支持微服务架构中的服务注册与发现、配置管理、动态 DNS 服务和服务监控等功能

在微服务架构中,服务的数量很多,服务之间的依赖关系很复杂,因此需要一个集中化的服务注册与发现平台来管理这些服务。Nacos 在微服务架构中的作用有:

  • 服务注册与发现:Nacos 可以让服务实例将自己注册到 Nacos 中心,其他服务可以通过 Nacos 中心来发现这些服务实例。Nacos 支持多种服务注册方式,例如 DNS、HTTP、TCP 和 UDP 等。

  • 配置管理:Nacos 可以让服务实例动态地获取配置信息,而不必重新部署或重启服务实例。这样可以方便地进行配置的修改和管理,提高了系统的灵活性和可维护性。

  • 动态 DNS 服务:Nacos 可以提供动态 DNS 服务,将服务实例的 IP 地址映射到域名上,从而实现服务的负载均衡和高可用性。

  • 服务管理:Nacos 可以提供服务的健康检查、流量管理、服务降级、服务熔断等功能,帮助开发者更好地管理和监控服务。

二、将服务注册到Nacos

将微服务注册到 Nacos 中的主要原因是为了实现服务发现和负载均衡。

在application.properties中将微服务注册进来:

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

127.0.0.1:8848,表示 Nacos 服务注册中心运行在本地 IP 地址为 127.0.0.1,端口号为 8848 上。

需要将该配置项添加到 application.properties 或 application.yml 配置文件中,以告诉 Spring Cloud Nacos 服务注册中心的地址。Spring Cloud Nacos 在启动时会读取该配置项,并自动将服务注册到指定的 Nacos 服务注册中心。

当有多个 Nacos 服务注册中心时,可以将多个地址用逗号分隔开,例如:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848,127.0.0.1:8849

这表示将会同时向两个 Nacos 服务注册中心进行服务注册和发现。

三、微服务之间的调用

微服务之间可以通过 HTTP、RPC 和消息队列等方式进行调用。

在一个 Spring Cloud 项目中,不同的微服务模块之间可以通过 Spring Cloud 提供的服务注册与发现机制来进行调用。可以采用以下步骤来实现微服务之间的调用:

  • 在每个微服务模块中,使用 Spring Cloud 提供的服务注册与发现组件(例如 Eureka、Consul、Zookeeper 或 Nacos 等)将自己注册到注册中心。

  • 在需要调用其他微服务模块的模块中,通过服务发现机制(例如使用 Ribbon 或 Feign 等)从注册中心获取需要调用的微服务的地址信息。

  • 使用 HTTP、RPC 或消息队列等方式,通过获取到的微服务地址信息来进行调用。具体调用方式可以根据具体的场景和需求选择,例如使用 RestTemplate 或 Feign 进行 HTTP 调用,使用 gRPC 或 Dubbo 进行 RPC 调用,使用 RabbitMQ 或 Kafka 进行消息通信等。

四、具体调用实现(一)

采用以下步骤来调用在 Nacos 中心注册的微服务:
(1)在需要调用 Nacos 中心注册的微服务的模块中,添加 Nacos 相关依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(2)在需要调用 Nacos 中心注册的微服务的类中,使用 @NacosInjected 注解来注入 NacosServiceManager 对象:

@RestController
public class MyController {

    @NacosInjected
    private NacosServiceManager nacosServiceManager;

    // 其他代码...
}

NacosServiceManager对象可以用来获取 Nacos 中心上的服务信息。

(3)在需要调用 Nacos 中心注册的微服务的类中,使用 nacosServiceManager 对象的 getService 方法来获取指定服务的实例信息:

@RestController
public class MyController {

    @NacosInjected
    private NacosServiceManager nacosServiceManager;

    @GetMapping("/hello")
    public String hello() {
        // 获取服务实例信息
        ServiceInstance serviceInstance = nacosServiceManager.getService("service-provider");
        // 组装服务 URL
        String serviceUrl = "http://" + serviceInstance.getIp() + ":" + serviceInstance.getPort();
        // 发起服务调用
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(serviceUrl + "/hello", String.class);
        return result;
    }
}

在上面的代码中,nacosServiceManager.getService("service-provider") 方法可以获取名为 service-provider 的微服务的实例信息,serviceInstance.getIp()serviceInstance.getPort() 方法可以分别获取服务实例的 IP 地址和端口号,然后可以通过 RestTemplate的restTemplate.getForObject 或其他 HTTP 客户端库来发起服务调用。

调用在 Nacos 中心注册的微服务的模块不需要在 Nacos 中心进行注册,只有微服务本身才需要将自己注册到 Nacos 中心,以便其他微服务可以发现和调用它。

五、具体调用实现(二)

在调用微服务时,可以通过 Nacos 提供的服务注册与发现机制,从 Nacos 中心获取需要调用的微服务的地址信息,然后使用该地址信息进行调用。

(1)在调用微服务的模块中添加 Nacos 客户端依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(2)在需要调用微服务的代码中,使用 Spring Cloud 提供的服务发现组件(例如 Ribbon 或 Feign 等)从 Nacos 中心获取服务实例信息:

@Service
public class MyService {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    public String callService() {
        // 从 Nacos 中心获取服务实例信息
        ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
        String serviceUrl = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/hello";
        String result = restTemplate.getForObject(serviceUrl, String.class);
        return result;
    }
}

在上面的代码中,loadBalancerClient.choose(“service-provider”) 方法会从 Nacos 中心获取名为 service-provider 的微服务的实例信息,然后使用 RestTemplate 或其他 HTTP 客户端库来发起服务调用。

LoadBalancerClient 是 Spring Cloud 提供的负载均衡客户端接口,用于从服务注册中心获取服务实例信息,并根据负载均衡策略选择一个实例进行服务调用。

在实际应用中,通常会使用 Spring Cloud 提供的 Feign 或 OpenFeign 等客户端库来调用微服务,这样可以避免手动使用 RestTemplate 和负载均衡组件进行服务调用。


相关文章:
https://blog.csdn.net/m0_67393619/article/details/126081197
http://www.wityx.com/post/113355_1_1.html文章来源地址https://www.toymoban.com/news/detail-479809.html

到了这里,关于微服务之间的调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【探索SpringCloud】服务发现-Nacos使用

    在聊服务注册中心时,便提到了Nacos。这次便来认识一下。当然,这自然没有官方介绍那般详尽,权当是学习了解Nacos原理的一个过程吧。 Nacos,全名:dynamic Naming And Configuration Service. 而这个名字则强调了Nacos的两大基石: Naming Service 和 Config Service。 Config Service 自然是负责提供

    2024年02月13日
    浏览(33)
  • Nacos服务注册或发现、Nacos服务分级模型、Nacos负载均衡策略、加权负载均衡、Nacos环境隔离

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    2024年01月16日
    浏览(41)
  • 微服务 – Spring Cloud – Nacos服务注册、发现

    1、引入依赖 父pom依赖 子pom依赖 2、配置文件 3、主启动类 第三部完成 打开nacos 在服务列表即可看到注册进来的服务. 4、业务类 写一个接口供服务发现者使用 1、引入依赖 2、配置文件 3、主启动类 打开nacos 在服务列表即可看到注册进来的服务. 4、发现第一个服务 并调用第一

    2024年02月11日
    浏览(91)
  • 微服务·架构组件之服务注册与发现-Nacos

    Nacos服务注册与发现流程 服务注册:Nacos 客户端会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。 Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。 服务心跳:在服务注册后,Nacos Client会维

    2024年02月02日
    浏览(45)
  • 传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析

    DNS 服务器可以在一定程度上用作服务发现的机制,以下是其冲动服务发现的一些利弊 优势 广泛性 : DNS是互联网的标准协议之一,已经广泛地被支持和使用。因此,使用DNS作为服务发现的机制可以借助现有的网络基础设施,无需引入新的工具。 简单性 : DNS的域名解析机制

    2024年02月12日
    浏览(37)
  • Nacos 1.4.x 服务发现源码阅读

    关键属性 HostReactor MapString, ScheduledFuture? futureMap:缓存向服务端请求ServiceInfo的定时任务 MapString, ServiceInfo serviceInfoMap:缓存从服务端获取的Service信息 MapString, Object updatingMap:用来标记是是否存在其他请求向服务端以相同的条件请求ServiceInfo ServiceManager MapString, MapString, Service

    2024年02月12日
    浏览(30)
  • 【探索SpringCloud】服务发现-Nacos服务端数据结构和模型

    上一文中,我们从官方的图示了解到Nacos的服务数据结构。但我关心的是,Nacos2.x不是重构了吗?怎么还是这种数据结构?我推测,必然是为了对Nacos1.x的兼容,实际存储应该不是这样的。于是,沿着这个问题出发我们一起来翻一下源码。 在扎入源码之前,我们需要回忆一下,

    2024年02月10日
    浏览(43)
  • springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)

    如果项目使用微服务架构,如果A微服务需要访问B微服务,需要http请求进行调用,当然需要B微服务的地址与端口号,微服务可以向之前提到的服务中心进行获取B服务的ip地址和端口号,这就是服务发现 1.客户端主动获取 客户端: 流程: 1.先是故障转移机制判断是否去本地文

    2024年02月10日
    浏览(43)
  • Nacos:服务的注册、发现和配置中心(注册篇)

    Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 N

    2024年02月15日
    浏览(39)
  • 微服务架构的服务注册和发现究竟采用Nacos还是Eureka ?

    微服务架构已经成为了构建分布式应用程序的主要方式之一,而服务注册与发现在微服务架构中扮演着至关重要的角色。在这个领域,有两个非常流行的工具,它们分别是Nacos和Eureka。我们来深入探讨这两者之间的区别,以帮助您在选择适合您项目的服务注册与发现工具时提

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包