注册中心简介
背景分析
在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次就是何如在不同的服务之间进行通信?如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带,由此注册中心诞生(例如淘宝网卖家提供服务,买家调用服务)。
Nacos概述
Nacos(DynamicNaming and Configuration Service)是一个应用于服务注册与发现、配置管理的平台。它孵化于阿里巴巴,成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。
构建Nacos服务
准备工作:
- 确保电脑已配置JAVA_HOME环境变量
- 确保MySQL版本为5.7以上
初始化配置
-
打开操作系统命令行,登录mysql,执行sql脚本,不是nacos/conf目录下自带的,我们可以使用mysql自带的客户端,在任意命令行登录mysql,然后执行如下指令: source d:/nacos-mysql.sql 执行成功以后会创建一个nacos_config数据库 -
在/nacos/conf/application.properties里打开默认配置,并基于你当前环境配置要连接的数据库,连接数据库时使用的用户名和密码(假如前面有"#"要将其去掉):
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
服务启动于访问
启动nacos服务(可以在nacos的bin目录下通过指令启动)
Linux:
./startup.sh -m standalone
Windows:
startup.cmd -m standalone
访问nacos服务 浏览器输入:http://localhost:8848/nacos地址,其中账号密码为:nacos/nacos
服务注册于调用入门
业务描述
创建两个项目Module分别为服务提供者和服务消费者(假如已有则无需创建),两者都要注册到NacosServer中,然后服务提供者可以为服务消费者提供远端调用服务:
生产者服务创建及注册
创建服务提供者工程,继承父工程,修改pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>01-sca</artifactId>
<groupId>com.jt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sca-provider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
</dependencies>
</project>
创建并修改配置文件application.yml,实现服务注册:
server:
port: 8081
spring:
application:
name: sca-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
创建其启动类(注意其启动类要在com.jt总包下): 启动启动类,刷新nacos服务,检查是否服务注册成功:
消费者服务发现及调用
在sca-provider项目中创建服务提供方对象,基于次对象对外提供服务:
通过@value注解拿到配置文件中配置的内容 8080为没有读到server.port的值时,给的默认值 创建服务消费者工程,继承父工程,修改其pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>01-sca</artifactId>
<groupId>com.jt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sca-consumer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
创建sca-consumer服务中的配置文件application.yml:
server:
port: 8090
spring:
application:
name: sca-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
sca-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
feign:
hystrix:
enabled: true
创建消费端启动类并实现服务消费(注意启动类在com.jt总包下):
在sca-consumer启动类中添加方法,用于创建RestTemplate对象.
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
我们基于RestTemplate 对象可以实现远端服务调用,例如sca-consumer调用sca-privider
定义sca-consumer服务的消费端Controller,在此对象方法内部实现远端服务调用: 此方法中通过RestTemplate对象来远程调用sca-provider中的服务 getForObject 基于RestTemplate对象中的相关方法进行服务调用
启动消费者服务,在浏览器输入http://localhost:8090/consumer/doRestEcho1地址进行访问测试。
小结
- 为什么要将服务注册到nacos?(为了更好的查找这些服务)
- 在Nacos中服务提供者是如何想Nacos注册中心(Registry)续约的?(5秒心跳)
- 对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
- 服务消费方是如何调用服务提供方的服务的?(通过RestTemplate对象实现远端调用)
服务负载均衡设计及实现
业务描述
|