计算机系统应用教程网站

网站首页 > 技术文章 正文

SpringCloud基础组件(1)——服务注册与发现

btikc 2024-09-20 14:51:56 技术文章 26 ℃ 0 评论

在微服务框架中,服务注册与服务发现是重中之重,因为在多服务情况下,服务之间的请求调用直接通过服务名来完成,而不用关心具体每个服务的端口号。如何只根据服务名就能完成找到服务的具体地址,这就是服务注册中心所完成的功能了。

与SpringCloud集成的服务治理(服务注册与发现)框架有多种,比如Eureka、Spring Cloud Alibaba Nacos、Consul、Zookeeper。本文主要讲EurekaNacos

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集成

支持

不支持

支持

不支持

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表