转载

Spring Cloud Eureka 简单使用

我们知道在微服务的架构中,通常会根据系统的特性、特点将系统成分成多个模块(服务),用于应对高并发,大量数据的对外服务。

这时,拆分系统后,比如将拆分成了 订单服务,商品服务,用户服务,库存服务,积分服务,积分服务等,拆开后就代表可以独自发布。

这样就导致了 各个服务之间 不能互相通信了,比如 下单时,需要减库存(库存服务),需要给下单人 加积分(积分服务)等。

所以为了 能够让对应的模块 获取其他的模块信息,首先要解决的问题就是要知道,我需要的服务在哪里?

这样就出现了一种解决方案,那就是用个第三方来存储 所有的服务的元信息(可以简单理解为ip:port),这个第三方就称为 服务注册中心

微服务架构中 常用的注册中心有 eureka,zookeeper,nacos等。

我这看下eureka的简单使用

2. eureka server 单节点配置

新建一个工程

  1. pom.xml配置
Spring Cloud Eureka 简单使用

我这里采用的是当前最新版本

SpringBoot版本为: 2.1.8.RELEASE

SpringCloud版本为: Greenwich.SR2

  1. application.yml
# 端口号
server:
  port: 7000

spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: server
  client:
    # 是否拉取 注册的服务信息, 默认false;因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据
    fetch-registry: false
    # 是否注册自身到eureka服务,默认false
    register-with-eureka: false

复制代码

注意:6000这个端口不要用,一个坑,好像chrome.edge把这个端口禁用了,有的浏览器能用。

  1. 启动类上 添加 @EnableEurekaServer 注解
// 添加 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class LinnEurekaApplication {

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

}
复制代码
  1. 需要修改下 host

windows 系统在 C:/Windows/System32/drivers/etc/hosts 打开后添加

Spring Cloud Eureka 简单使用
  1. 启动后 访问http://server:7000 看到下面的 页面 表示 配置成功
Spring Cloud Eureka 简单使用

3. eureka server高可用集群配置

eureka支持配置集群,即每一台 Eureka 都在配置中指定另一个 Eureka 或多个 地址作为伙伴,它在启动时会向伙伴节点获取注册列表

配置如下:

  1. 首先 弄三个(我这配置3个机器)配置文件 比如 application-server1.yml,application-server2.yml,application-server3.yml

① application-server1.yml文件

# 端口号
server:
  port: 7001

eureka:
  instance:
    hostname: server1
  client:
    # 是否拉取 注册的服务信息, 默认true
    fetch-registry: false
    # 是否注册自身到eureka服务,默认true
    register-with-eureka: false
    # 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
    serviceUrl:
      defaultZone: http://server2:7002/eureka/,http://server3:7003/eureka/
复制代码

② application-server2.yml文件

# 端口号
server:
  port: 7002


eureka:
  instance:
    hostname: server2
  client:
    # 是否拉取 注册的服务信息, 默认true
    fetch-registry: false
    # 是否注册自身到eureka服务,默认true
    register-with-eureka: false
    # 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
    serviceUrl:
      defaultZone: http://server1:7001/eureka/,http://server3:7003/eureka/
复制代码

③ application-server3.yml文件

# 端口号
server:
  port: 7003


eureka:
  instance:
    hostname: server3
  client:
    # 是否拉取 注册的服务信息, 默认true
    fetch-registry: false
    # 是否注册自身到eureka服务,默认true
    register-with-eureka: false
    # 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
    serviceUrl:
      defaultZone: http://server1:7001/eureka/,http://server2:7002/eureka/
复制代码
  1. 分别以不同的 profile 启动

java -jar xxx.jar --spring.profiles.active=server1

java -jar xxx.jar --spring.profiles.active=server2

java -jar xxx.jar --spring.profiles.active=server3

如果在 idea中可以直接配置指定:

Spring Cloud Eureka 简单使用
  1. 启动后分别访问 server1:7001,server2:7002,server3:7003 比如访问 server1:7001
Spring Cloud Eureka 简单使用

看到有另外的两个副本 表示 配置成功

  1. 配置的话也可以这么配置(profiles多种写法),启动后同样可以看到
spring:
  application:
    name: eureka-server

eureka:
  client:
    # 是否拉取 注册的服务信息, 默认true
    fetch-registry: false
    # 是否注册自身到eureka服务,默认true
    register-with-eureka: false
    serviceUrl:
      defaultZone: http://server6:7006/eureka/,http://server7:7007/eureka/,http://server8:7008/eureka/

---
spring:
  profiles: es1

server:
  port: 7006
eureka:
  instance:
    hostname: server6
---
spring:
  profiles: es2

# 端口号
server:
  port: 7007
eureka:
  instance:
    hostname: server7
---
spring:
  profiles: es3
# 端口号
server:
  port: 7008
eureka:
  instance:
    hostname: server8
复制代码

4. eureka 客户端

客户端就是所有的服务提供方,比如用户服务,订单服务,库存服务,都需要注册到 eureka。

注册到 eureka非常简单,我创建了一个order-service工程,模拟订单服务,分三步走:

  1. 添加依赖(在对应的服务中)
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
复制代码
  1. 在启动类上加上注解 @EnableEurekaClient
// 添加  @EnableEurekaClient 注解
// 后来看官网说是 可以不用加 @EnableEurekaClient 注解(只需要添加上面的依赖就可以了),我没有加也是可以注册上去的
//@EnableEurekaClient
@SpringBootApplication
public class LinnOrderApplication {

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

}
复制代码
  1. 配置文件 application.yml
# 应用名称
spring:
  application:
    name: order-service

server:
  port: 9000

eureka:
  client:
    serviceUrl:
      # 注册中心地址,写一个即可,其他会同步过去
      #defaultZone: http://server1:7001/eureka,http://server2:7002/eureka,http://server3:7003/eureka,
      defaultZone: http://server1:7001/eureka
复制代码
  1. 启动工程

访问之前注册中心地址 server1:7001

Spring Cloud Eureka 简单使用

看到 有order-service注册上去了

5. eureka 客户端 集群配置

这里集群就是 每个被拆分的服务 分多分部署,比如还是以订单为例

  1. 新建两个配置文件 application-order1.yml,application-order2.yml

①application-order1.yml 文件

server:
  port: 9001

eureka:
  client:
    serviceUrl:
      defaultZone: http://server1:7001/eureka
复制代码

②application-order2.yml 文件

server:
  port: 9002

eureka:
  client:
    serviceUrl:
      defaultZone: http://server1:7001/eureka
复制代码
  1. 以不同的 profiles 启动

java -jar xxx.jar --spring.profiles.active=order1 java -jar xxx.jar --spring.profiles.active=order2

或者在idea中配置

  1. 访问server1:7001
Spring Cloud Eureka 简单使用

可以看到 order-service 有两个服务提供 分别在 9001 和9002 端口,这就表示 客户端集群成功了

原文  https://juejin.im/post/5d770db951882520d46abbb6
正文到此结束
Loading...