一、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://www.toymoban.com/news/detail-479809.html
相关文章:
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模板网!