什么是服务注册

服务注册:将服务所在主机、端口、版本号、通信协议等信息登记到注册中心上;

什么是服务发现  

服务发现:服务消费者向注册中心请求已经登记的服务列表,然后得到某个服务的主机、端口、版本号、通信协议等信息,从而实现对具体服务的调用;

为什么要使用 Eureka 注册中心、Eureka 的优点

 1)Eureka Client 与 Eureka Server 交互,只需要通过服务标识符就可以获取其注册的服务;不需要像以前一样通过 http://localhost:8080/ 来调用服务提供者地址;

2)可以实现服务的负载均衡故障转移;比如一个服务崩了,我们可以调用备份服务,不影响程序正常的使用;

Eureka 是什么 

1)Eureka 是 Netflix 的子模块之一,也是一个核心模块

2)Eureka 采用 C-S(客户端/服务端)的设计架构,也就是 Eureka 由两个组件组成;Eurake 服务端,Eureka 客户端;

3)Eureka Server 是一个独立的项目,用于注册服务以及实现服务的负载均衡故障转移,它是服务的注册中心

4)Eureka Client 是我们的微服务,它是用于与 Eureka Server 交互,获取其注册的服务,使得交互变得非常简单(eg:不需要去记服务提供方的接口地址),只需要通过服务标识符拿到服务即可。

比如:没有 Eureka Client 时,我们需要标注 消费者端的服务接口地址;

 Eureka 与 SpringCloud 的关系

Eureka 是 Netflix 公司开发的,SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务的注册与发现;也就是说 SpringCloud 对 Netflix  Eureka 做了二次封装;

角色关系图:

 Eureka 服务端搭建

 1)创建一个新的Model,添加 Eureka 服务端依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        <version>2.2.9.RELEASE</version>
    </dependency>
</dependencies>

 2)引入 注解 @EnableEurekaServer,开启Eureka 注册中心服务端

@EnableEurekaServer  //开启Eureka 注册中心服务端
@SpringBootApplication
public class CloudServerEureka8761 {

    public static void main(String[] args) {
        SpringApplication.run(CloudServerEureka8761.class, args);
    }
}

 3)在 application.properties 对 Eureka 服务端进行相关配置

#指定内嵌的Tomcat端口
server.port=8761

spring.application.name=cloud-server-eureka8761

#Eureka服务端的实例名字
eureka.instance.hostname=localhost 
# 表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要)
eureka.client.register-with-eureka=false
# fetch-registry如果为false,则表示自己为注册中心,不需要去服务端检索其他服务信息
eureka.client.fetch-registry=false
# 指定 Eureka 服务注册中心的位置
eureka.client.service-url.default-zone=http://localhost:8761/eureka

 4)启动 Eureka 服务端,进行访问

访问地址:http://localhost:8761/

 Eureka 客户端搭建

 1)在服务提供者端添加,Eureka客户端依赖

   <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         <version>2.2.9.RELEASE</version>
   </dependency>

2)添加  @EnableEurekaClient 注解

@EnableEurekaClient
@SpringBootApplication
public class CloudProviderPaymennt8001Application {
    public static void main(String[] args) {
        SpringApplication.run(CloudProviderPaymennt8001Application.class, args);
    }
}

 3)在 application.properties 对 Eureka 客户端进行相关配置

server.port= 8001

# Spring的业务名
spring.application.name=cloud-payment-server
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

mybatis.mapperLocations= classpath:mapper/*.xml
# 所有 entity 别名类所在包
mybatis.type-aliases-package= com.lmgd.comm.entity

# 打开所有 web 的访问端点
management.endpoints.web.exposure.include=*

# 每隔 2s,向服务端发送一次心跳,证明自己依然“存活”
eureka.instance.lease-renewal-interval-in-seconds=2
# 告诉服务端,如果我 10s 之内没有给你发心跳,就代表我故障了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=10
# 告诉服务器,服务实例以 ip 作为链接,而不是取机器名 hostname
eureka.instance.prefer-ip-address=true
# 告诉服务端,服务实例的名字
eureka.instance.instance-id=cloud-provider-paymennt8001

# Eureka 注册中心的连接地址
eureka.client.service-url.default-zone=http://localhost:8761/eureka

4)启动 Eureka 客户端,访问注册中心地址 localhost:8761

 同理也可以把 消费者端注册到注册中心:

Status 的名字就是在 xml 配置的这个属性

# 告诉服务端,服务实例的名字
eureka.instance.instance-id=cloud-consumer-server
# 告诉服务端,服务实例的名字
eureka.instance.instance-id=cloud-provider-paymennt8001

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐