前言

上一章中,我们利用用户–订单–商品,实现了三个简单的微服务,实现了微服务之间的调用。但不知道大家有没有发现,我们是通过硬编码的方式,把服务者,消费者的服务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的控制面板中是否有注册上来的订单微服务,然后通过访问消费者服务验证调 用是否成功

总结

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

Nacos Discovery服务治理解决方案的更多相关文章

  1. Android的蓝牙BluetoothDevice.ACTION_FOUND没有被触发?

    我正在尝试从我的应用程序管理多个蓝牙事件,因此用户无需离开应用程序&尝试从Android设置搜索/配对蓝牙设备.我能够枚举以前配对的设备,并开始发现,但我无法找到附近的设备.背景资料:设备=三星galaxyS6OS=Android6.0.1,内核3.4.0-750027通过Android内置的发现可以看到蓝牙设备这是我的相关代码:更新的清单:尽管正在调用ACTION_disCOVERY_START

  2. 详解OpenFeign服务调用(微服务)

    OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等,这篇文章主要介绍了OpenFeign服务调用的相关知识,需要的朋友可以参考下

  3. EJB 3.0 开发指南之定时服务

    在EJB2.1的规范中需要实现ejbTimeout方法,当然还有ejbPassivate、ejbRemove等方法。在EJB3.0中,只有你想用它们的时候,你才必须创建它们,否则不必实现。将来我们开发的EJB也都是这样命名。Client.java:测试EJB的客户端类。Build.xml:ant配置文件,用以编译、发布、测试、清除EJB。在JBOSS实现的EJB3.0中,你不必写任何的EJB部署文件和jboss部署文件。JBOSS默认使用接口的全称作为它的JNDI名。在Eclipse的Ant视图中执行ru

  4. php7中停止php-fpm服务的方法详解

    这篇文章主要给大家介绍了关于php7中如何停止php-fpm服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 多php服务器实现多session并发运行

    由于session的采用,大大方便了web开发员的工作。现在php4也加入session的支持,再度显示出opensource的强大力量。原来设计的静态的唯一的sessionID导致数据混乱。这样,动态生成一个唯一的sessionID成为当务之急。解决办法很简单:我用了php文件名时间戳为唯一的sessionID,这样在我的程序中的每个session就各就各位,不再混乱了。Mysessionname也不能用cookie方式存放,因为多个session肯定会覆盖掉原先的cookie文件。

  6. PHP&amp;MYSQL服务器配置说明

    一、各软件下载地点:Apache:http://www.apache.org/dist/httpd/binaries/win32/PHP:http://www.php.net/downloads.phpActivePerl:http://www.activestate.com/Products...l/download.plexZendOptimizer:http://www.zend.com/store/getfreefi...pid=13&zbid=198mod_gzip:http://www.rem

  7. CentOS7.0下安装PHP5.6.30服务的教程详解

    这篇文章主要介绍了CentOS7.0下安装PHP5.6.30服务的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  8. Spring Cloud Alibaba Nacos服务治理平台服务注册、RestTemplate实现微服务之间访问负载均衡访问的问题

    这篇文章主要介绍了Spring Cloud Alibaba:Nacos服务治理平台,服务注册、RestTemplate实现微服务之间访问,负载均衡访问,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. Android服务Service教程

    Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等,下面来看看详细内容,需要的朋友可以参考下

  10. 详解Android壁纸服务的启动过程

    你有设置过手机的壁纸吗,你知道壁纸是什么样的程序它是怎么在后台运行的吗?这篇文章主要介绍了详解Android系统壁纸服务的启动过程

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部