服务注册与发现(一)|学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 快速学习服务注册与发现

开发者学堂课程【微服务实战-服务注册与发现 - Nacos Discovery服务注册与发现笔记与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/622/detail/9442


服务注册与发现(一)

内容介绍:

一、服务注册与发现的基本概念

二、本地开发环境中开发应用环境的过程

三、如何部署到阿里云 EDAS

一、服务注册与发现的基本概念

1.服务注册

服务实例将自身服务信息注册到注册中心,包括服务所在 IP 和 Port、服务版本以及访问协议等

(我们所熟悉的 DNS 就是一个很经典的服务注册,那么在微服务的环境下,服务的实例除了要注册自己所在的 IP 地址和端口号以外,还要把其他的一些信息,比如说自己的版本号,所支持的通讯协议等等这些信息,也把它放到第三方的注册中心当中去,可以把它想象成它是一个增强版的DNS)

2.服务发现

应用实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求他们提供的服务。

已经有了 dns 为什么还需要服务注册和发现的组件?

由于自动扩缩、故障与升级,整组服务实力会动态变更。

举例:假设一个服务有十个实例,在客户端无法发现对应实例时,需要更强大有效的服务注册中心来管理和发现所需要的服务。

服务的注册和发现是微服务治理中一个非常重要、非常核心的观念和功能。


二、本地开发环境中开发应用环境的过程

1.启动 Nacos

为了搭建在本地的开发环境,我们需要下载并安装 NACOS,既可以通过下载源代码来编译它,也可以下载编译好以后的压缩包。

NACOS 官网:https://nacos.io/zh-cn/docs/quick-start.html大家可以去看一下具体的文档。

下载以后的启动命令 sh  startup.sh-m standalone(启动命令 standalone 代表着单机模式运行,非集群模式)

启动nacos

image.png

启动好的 NACOS 一方面可以监听 api,一方面也可以有一个控制台。

NACOS 控制台如下

image.png

NACOS 分成两部分,一个是它的配置项管理,另一个就是他的服务列表。

本地开发

Demo源码:https//github.com/szihai/Nacos-discovery-demo

服务端 @EnableDiscoveryClient

下面看一下具体的代码本  

/**

*@author <a href= "mailto:fangjian0423@gmail.com">Jim</ a>

*/

@SpringBootApplication

@EnabLeDiscoveryClient

public class ProviderApplication {public static void main(string[] args) { SpringApplication.run(Provider)

@RestController

class Echocontroller {@RequestMapping (value = "/echo/{string}", method  = RequestMethod.GET)  public String eche(@PathVariable String string) {return string;}}

这两个代码其实都是 spring boot 应用程序,它的主要目的就是告诉大家如何使用Nacos 来实现服务注册和发现,现在看到的是服务端的代码是它的源码,就是最基本的部分。

首先看一下它实现的功能,它是实现一个 restAPI,因为这里有一个rest controller annotation,它的路径的是 echo,后面跟了一个变量 string,它做的就是把 string 返回回去(你告诉它要返回什么变量,它会直接把这个 string 给返回回去)

另一个要讲的是 enable discovery climb,其实这个跟你用其他的注册中心的是一个 annotation,但是用了这个 annotation 以后,它就会让注册中心来扫,可以找到这个应用,在我们使用这个 Nacos 的时候,Nacos 就会来扫这个应用程序,然后把它加到注册中心当中去,这是注册的过程.

2.服务端

服务端 application.properties

在这个配置文件中,我们做了这几件事,第一定义了服务的名字叫做 service -provider,

第二定义了稍后要发布的端口是8081,第三把 Nacos 的服务的地址和端口号告诉我们自己的应用程序。最后一个是稍后要讲的 endpoint,它是要暴露这些n point

spring.application.name=service-provider

server.port-8081

spring.cloud.nacos.discovery.servec-addr=127.0.0.1:8848  

management.endpoints.web.exposure.include=*

让我们来看一下服务端的程序运行起来是什么样的情况?我们可以到 Nacos 控制台来看一下。

用户是 nacos,密码也是 nacos。可以看到现在在这个服务下有一个实例,看一下具体的情况,这个服务已经注册上去了。

3.Actuator 端点

监控和管理服务

/info, /health

http://localhost:8081/actuator/nacos-discovery

这个概念是 spring boot 的一个概念,它是用来监测你的应用程序,端点的路径是actuator 后面跟着你要查的具体的 api 是什么。

Spring Boot 它有自己实现的一些 api。

现在要讲的是 Nacos-discovered 的端点,locahost:l8081是应用他自己的IP和端口号。

其他的都 srings boot 所提供的,要看的就是 nacos-discovery 这个端点是实现了,在这里就有关于端点基本的情况,可以看到 nacos 服务器的地址,自己的服务发布到这个服务的一些信息。

4.消费端

Pom

Application.properties

首先看一下 pom 文件,在这个 pom 文件当中,和服务端一样也是有依赖的管理,也指定了相应的版本号。在这个依赖当中,也加了 alibaba-nacos- discoverey -starter。

但是这个和服务方不一样,又引进了一个 openfeign,openfeign 不是一个netflix os s组件,就是他不是 springup 自带的,要手动把他加进来。

Spring.applcation.name=service-consumer

server.port=18082

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

这个就是 application.practice,消费端的端口是18082,和刚刚不一样,刚刚是8081,这个名字叫做service consumer(只是这个应用的名字而已),同样这个nacos的服务器的地址和端口,是本地的8848端口。

5.消费端的代码

REST Template

Feign client

消费端这里用了两种实现方式,一个是 rest template,一个是 feign client。我们要讲的重点是 nacos 两种方式都支持。首先看 rest template,用 rest template 之前,先要加 annotation 也就是 LoadBalanced。

REST Template 定义以后在 testcontroller 就定义了另外一个 restCPI,就是restTemplate 他会去调用 service-provider 的 echo 的 API。把这个返回的结果在作为这个 rest API 的返回值。

feign client 和 REST Template 有点不同,feign client 是二合一,它是 rest 加上load balance 它两个都包括,所以你调用的时候,就是先定义一个 interface,在feign client 已经表述了我要用的服务是 service -provider,那么在实现它的rest API 的时候,就直接表述API的名字是 echo-feign,后面跟着一个它会找 echo-Service 的 echo 服务,为什么我们在这个已经是已经是消费端的地方还要再做一个 restAPI,是因为我们作为用户来讲,可以测试,否则我们无法知道是否调成。

@LoadBalanced

@Bean

Public RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(Consumer)}

@FeignClient(name = "service-provider")

interface Echoservice {@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)  

String echo(@PathVariable("str”) String str);

@RestController

class TestContcoller {

@Autovired

private RestTemplate restTemplate;

@Autowired

private EchoService echoSecvice;

@RequestMapping (value = "/echo-rest/{str}", method = RequestMethod.GET  public String rest(@PathVariable String str){

returnrestTemplate.getForobject(url: "http://service-provider/echo  String. class);

@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET

public String feign(@PathVariable String str){  return echoService.echo

6.Ribbon的拓展

在运行客户端程序之前,在多讲一下关于 load balance 的问题,nextlinks 它提供了一个内置的 load balance 叫做 ribbon,ribbon 是和 rest template 在一起工作的,为了让这个可以工作 nacos 也拓展了其中 ribbon 当中的一个 interface 叫做service list。就是说 ribbon 作为一个负载均衡的工具,它也可以对 nacos 的服务进行一个负载均衡的操作,所以这就是ribbon的作用,然后nacos对他进行了扩展。

运行起来以后,可以做个实验,我们暴露了两个 restAPI 一个叫 echo-rest 一个叫echo-feign,先来看一下 echo-feign,给它加一个东西叫做 test。然后它就返回test,所以这个路径就是从 Brother 到 echo-feign,然后 echo-feign 去调刚刚他在那里定义的 service-provider 的 service。

接下来看 echo-rest,它返回的就是 rest,echo-rest 刚刚讲的它是用 rest template加 ribbon 去调 service- provider,这就是在本地开发 nacos 应用的情况。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
前端开发
前端学习笔记202305学习笔记第二十五天-事件注册和调用
前端学习笔记202305学习笔记第二十五天-事件注册和调用
37 0
|
NoSQL Java 数据库
注册功能(接口)| 学习笔记
快速学习 注册功能(接口)
400 0
注册功能(接口)| 学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(下)| 学习笔记
|
存储 开发者
数字音频基础(中)| 学习笔记
快速学习数字音频基础(中),介绍了数字音频基础(中)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(中)| 学习笔记
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(上)| 学习笔记
|
存储 Oracle 关系型数据库
第二课(三)|学习笔记
快速学习第二课(三)
192 0
第二课(三)|学习笔记
|
存储 运维 小程序
小程序云开通和入门(一)|学习笔记
快速学习小程序云开通和入门(一)
230 0
小程序云开通和入门(一)|学习笔记
|
SQL Kubernetes 关系型数据库
阿里云 K8s 环境创建(上)|学习笔记
快速学习阿里云 K8s 环境创建(上)
阿里云 K8s 环境创建(上)|学习笔记
|
Kubernetes 监控 固态存储
阿里云 K8s 环境创建(下)|学习笔记
快速学习阿里云 K8s 环境创建(下)
阿里云 K8s 环境创建(下)|学习笔记
|
Go 开发者
数组应用实例(1)|学习笔记
快速学习数组应用实例(1)。
数组应用实例(1)|学习笔记