Nacos Discovery服务治理解决方案

 更新时间:2022年11月03日 14:54:42   作者:_李淳罡  
DiscoveryClient是专门负责服务注册和发现的,我们可以通过它获取到注册到注册中心的所有服务,这篇文章主要介绍了Nacos Discovery服务治理,需要的朋友可以参考下

前言

上一章中,我们利用用户–订单–商品,实现了三个简单的微服务,实现了微服务之间的调用。但不知道大家有没有发现,我们是通过硬编码的方式,把服务者,消费者的服务Url,写到了代码中,这样做肯定是不行的,存在着许多的问题,比如:

一旦服务提供者地址变化,就需要手工修改代码一旦是多个服务提供者,无法实现负载均衡功能一旦服务变得越来越多,人工维护调用关系困难

那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现服务治理

服务治理

什么是服务治理?

服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。

  • 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
  • 服务发现: 服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

常见的注册中心

Zookeeper

zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题。

如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

Eureka

Eureka是Springcloud Netflix中的重要组件,主要作用就是做服务注册和发现。但是现在已经闭源。如果是打算新建微服务到话,不推荐使用Eureka了。

Consul

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现 和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value 存储、多数据中心和分布式一致性保证等特性。

Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

Nacos

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

它是SpringCloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config

Nacos 入门

Nacos 官网介绍:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

从上面的介绍就可以看出,nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。

搭建nacos环境

第1步: 安装nacos

下载地址: https://github.com/alibaba/nacos/releases

下载zip格式的安装包,然后进行解压缩操作。

第2步: 启动nacos

#切换目录
cd nacos/bin
#命令启动
startup.cmd -m standalone

第3步: 访问nacos

打开浏览器输入http://localhost:8848/nacos

即可访问服务, 默认密码是nacos/nacos

将商品微服务注册到nacos

接下来开始修改 shop-product 模块的代码, 将其注册到nacos服务上 。

1、在pom.xml中添加nacos的依赖

<!--nacos客户端-->
<dependency>
	<groupId>com.alibaba.cloud</groupId> 
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
</dependency>

2、在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication{
	......
}

3 在application.yml中添加nacos服务的地址

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

4、启动服务, 观察nacos的控制面板中是否有注册上来的商品微服务

将订单微服务注册到nacos

接下来开始修改 shop_order 模块的代码, 将其注册到nacos服务上。

1、在pom.xml中添加nacos的依赖

<!--nacos客户端-->
<dependency>
	<groupId>com.alibaba.cloud</groupId> 
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
</dependency>

2、在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication{
	.....
}

3、在application.yml中添加nacos服务的地址

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

4、修改OrderController, 实现微服务调用

@RestController
@Slf4j
public class OrderController {

	@Autowired
	private RestTemplate restTemplate;
	@Autowired
	private OrderService orderService;
	@Autowired
	private DiscoveryClient discoveryClient;
	
	//准备买1件商品
	@GetMapping("/order/prod/{pid}")
	public Order order(@PathVariable("pid") Integer pid) {
 		 log.info(">>客户下单,这时候要调用商品微服务查询商品信息"); 
 		 //从nacos中获取服务地址
		ServiceInstance serviceInstance = discoveryClient.getInstances("service-product").get(0); 
		String url = serviceInstance.getHost() + ":" +serviceInstance.getPort(); 
		log.info(">>从nacos中获取到的微服务地址为:" + url);
		 //通过restTemplate调用商品微服务
		Product product = restTemplate.getForObject(
		"http://" + url + "/product/" + pid, Product.class); 
		log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));
		Order order = new Order();
		order.setUid(1);
		order.setUsername("测试用户");
	    order.setPid(product.getPid());
	 }
}

DiscoveryClient是专门负责服务注册和发现的,我们可以通过它获取到注册到注册中心的所有服务。

5、启动服务, 观察nacos的控制面板中是否有注册上来的订单微服务,然后通过访问消费者服务验证调 用是否成功

总结

这篇文章我们简单的实现了如何利用服务治理来管控微服务。那么对应的又引发一个问题,如果集群中用户访问量在某一瞬间达到最高点,可能会造成服务的瘫痪,这怎么解决呢?相信大家都知道负载均衡技术,也知道这里需要用到负载均衡,但在微服务中,如何实现服务调用的负载均衡呢?我们下篇文章再讲。

相关文章

  • MyBatis如何通过xml方式实现SaveOrUpdate

    MyBatis如何通过xml方式实现SaveOrUpdate

    这篇文章主要讲如何通过xml方式实现SaveOrUpdate,但是仍然建议在Service中实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-06-06
  • Java操作文件路径正反斜杠问题解决

    Java操作文件路径正反斜杠问题解决

    最近在实现文件上传时,windows与linux系统出现的问题,两个系统中操作文件使用"\","/"导致IOException,本文主要介绍了Java操作文件路径正反斜杠问题解决,感兴趣的可以了解一下啊
    2024-01-01
  • Java图形界面GUI布局方式(小结)

    Java图形界面GUI布局方式(小结)

    这篇文章主要介绍了Java图形界面GUI布局方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Spring Boot中slf4j日志依赖关系示例详解

    Spring Boot中slf4j日志依赖关系示例详解

    在项目开发中,记录日志是必做的一件事情。而当我们使用Springboot框架时,记录日志就变得极其简单了。下面这篇文章主要给大家介绍了关于Spring Boot中slf4j日志依赖关系的相关资料,需要的朋友可以参考下
    2018-11-11
  • 基于Java Springboot + Vue + MyBatis实现音乐播放系统

    基于Java Springboot + Vue + MyBatis实现音乐播放系统

    这篇文章主要介绍了一个完整的音乐播放系统是基于Java Springboot + Vue + MyBatis编写的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 详解Java的日期时间新特性

    详解Java的日期时间新特性

    随着时间的不断推移,现实的需求也在不断更新,原先的一些API已经难以满足开发需求了,从JDK 8之后,为了满足更多的开发需求,Java给我们增加了不少关于日期时间的新特性,接下来就带各位来看看这些新特性有哪些,需要的朋友可以参考下
    2023-06-06
  • java实现简单五子棋小游戏(1)

    java实现简单五子棋小游戏(1)

    这篇文章主要为大家详细介绍了java实现简单五子棋小游戏的第一部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 浅谈java中math类中三种取整函数的区别

    浅谈java中math类中三种取整函数的区别

    下面小编就为大家带来一篇浅谈java中math类中三种取整函数的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Java之idea @NotNull @Nullable 注解使用

    Java之idea @NotNull @Nullable 注解使用

    这篇文章主要介绍了Java之idea @NotNull @Nullable 注解使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 带你了解Java数据结构和算法之2-3-4树

    带你了解Java数据结构和算法之2-3-4树

    这篇文章主要为大家介绍了Java数据结构和算法之2-3-4树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论