在微服务框架中,服务注册与服务发现是重中之重,因为在多服务情况下,服务之间的请求调用直接通过服务名来完成,而不用关心具体每个服务的端口号。如何只根据服务名就能完成找到服务的具体地址,这就是服务注册中心所完成的功能了。
与SpringCloud集成的服务治理(服务注册与发现)框架有多种,比如Eureka、Spring Cloud Alibaba Nacos、Consul、Zookeeper。本文主要讲Eureka和Nacos。
Eureka
Eureka是Netflix旗下的一个产品,其2.0版本目前已经停止更新了,1.x版本仍然在继续使用,虽然已经停更,但是大家最好先了解下,毕竟之前用的人很多嘛(虽然现在很多人都转到Nacos了)。
使用Eureka需要自己创建服务注册中心微服务,该微服务的主要功能就是一个注册中心。它将其它服务注册进来。
Eureka Server
1 导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2 配置文件
server:
port: 7001
eureka:
instance:
hostname: eureka-server-7001 # 主机名称
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
# 设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://xxxxxxx:7002/eureka/
3 启动类配置,启动类上加上注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain {
public static void main(String[] args) {
SpringApplication.run(EurekaMain.class, args);
}
}
4 启动服务,打开web页面
Eureka Client
1.导入Eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.向配置文件添加配置
eureka:
client:
# 向注册中心注册自己
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
3.服务启动类上添加注解@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class PaymentMain {
public static void main(String[] args) {
SpringApplication.run(PaymentMain.class, args);
}
}
4.注册到Eureka服务器
Spring Cloud Alibaba Nacos
与Eureka不同的是,Nacos提供了jar包,该jar包集成服务注册中心、配置中心等功能于一体。当我们使用的时候就不需要考虑服务端的事情了,只需将我们的服务注册进入到服务端即可。
Nacos Server
1 下载Nacos:https://github.com/alibaba/nacos/releases
2 启动Nacos
- Linux/Unix/Mac,启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
- 如果您使用的是ubuntu系统,或者运行脚本报错提示符号找不到,可尝试如下运行:
bash startup.sh -m standalone
- Windows,启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
启动后的服务端页面
Nacos Client
以项目中的某个服务为例,将该服务注册进入到Nacos Server中
1. pom文件添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2. 向配置文件添加配置
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服务端名称
3. 启动类上添加@EnableDiscobveryClient将该服务注册到server-addr中
@SpringBootApplication
@EnableDiscoveryClient
public class OrderMain8001 {
public static void main(String[] args) {
SpringApplication.run(OrderMain8001.class, args);
}
}
4. 观察web页面,可以看出该服务已经被注册进来。
Consul
- Consul官方网站:https://www.consul.io/intro/index.html
- Consul下载地址:https://www.consul.io/downloads.html
- Spring Cloud Consul:https://www.springcloud.cc/spring-cloud-consul.html
功能:
- 服务发现
- 健康检测
- KV存储
- 多数据中心
- 可视化web界面
Consul Server
1.下载Consul,以windows为例,解压之后,得到consul.exe文件,然后双击consul.exe文件
2.在该文件目录下,打开cmd窗口,Start the Consul agent in development mode.
consul agent -dev
3.打开web界面,http://localhost:8500,至此服务端已经启动
Consul Client
1.导入pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
2.yaml配置
spring:
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: consul-service
3.启动类配置注解@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulServiceMain {
public static void main(String[] args) {
SpringApplication.run(ConsulServiceMain.class, args);
}
}
启动完后,web界面可以看出该服务已经被注册进服务中心
Zookeeper
前提:安装好Zookeeper。
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
2.yaml配置
spring:
application:
name: zookeeper-discovery-service
cloud:
zookeeper:
connect-string: localhost:2181
3.主启动类上注解配置
@SpringBootApplication
@EnableDiscoveryClient
public class ZookeeperDiscovertServiceMain {
public static void main(String[] args) {
SpringApplication.run(PaymentHystrixMain.class, args);
}
}
总结
下面这张表将四个服务注册中心的功能列举出来做了对比。
Nacos | Eureka | Consul | Zookeeper | |
一致性协议 | CP+AP | AP | CP | CP |
健康检查 | TCP/HTTP/MYSQL/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
负载均衡策略 | 权重/metadata/Selector | Ribbon | Fabio | —— |
雪崩保护 | 有 | 有 | 无 | 无 |
自动注销实例 | 支持 | 支持 | 支持 | 支持 |
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 不支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 支持 |
Dubbo集成 | 支持 | 不支持 | 支持 | 支持 |
K8S集成 | 支持 | 不支持 | 支持 | 不支持 |
本文暂时没有评论,来添加一个吧(●'◡'●)