一、概述:

Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现:Eureka , Consul , Zookeeper 本篇文章只对Eureka 进行介绍:

(部分内容引用  https://blog.csdn.net/hry2015/article/details/78220673,其博主有一系列的相关SpringCloud的整理)

Eureka:Netflix公司开发的服务发现中间件,用于服务的负载均衡和服务故障转移

SpringCloud 集成了EurekaSever,通过简单配置即可启动;Spring Cloud对Eureka的支持最好。

在Eureka中,所有的Eureka服务都被称为实例(instance),这些实例又分成为两大类:

1、Eureka Server: Eureka的服务端,即服务注册中心,负责维护所有实例的注册信息
2、Eureka Client: Eureka的客户端,根据功能又分为两类
      a. Service Provider:服务提供方,向Eureka Server做服务注册、续约和下线等操作,注册的主要数据包括服务名、机器ip、端口号、域名等等;
      b. Service Consumer:服务消费方, 向Eureka Server获取Service Provider的注册信息,并通过远程调用与Service Provider进行通信.

PS:可以将Service Provider和Service Consumer理解为角色。一个Eureka Client可以只是Service Provider,也可以只是Service Consumer,也可以同时即是Service Provider也是Service Consumer。(根据项目的具体情况,选择搭建架构)

二、注册中心(Eureka-Server)------单节点

首先大家要弄清楚下图的这种关系:

具体操作如下:

1、首先创建一个Eureka-Server的工程,这里可以选择创建Maven项目,也可直接创建Spring的项目,这里我选择第二种方式:

然后Next

然后Finish就创建工程完成

重点来了:进行单节点注册中心的配置如下

pom.xml文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.dajian.springcloud</groupId>
  12. <artifactId>eurka-server</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>eurka-server</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
  20. </properties>
  21.  
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. </dependencies>
  34.  
  35. <dependencyManagement>
  36. <dependencies>
  37. <dependency>
  38. <groupId>org.springframework.cloud</groupId>
  39. <artifactId>spring-cloud-dependencies</artifactId>
  40. <version>${spring-cloud.version}</version>
  41. <type>pom</type>
  42. <scope>import</scope>
  43. </dependency>
  44. </dependencies>
  45. </dependencyManagement>
  46.  
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-maven-plugin</artifactId>
  52. </plugin>
  53. </plugins>
  54. </build>
  55.  
  56. <repositories>
  57. <repository>
  58. <id>spring-milestones</id>
  59. <name>Spring Milestones</name>
  60. <url>https://repo.spring.io/milestone</url>
  61. </repository>
  62. </repositories>
  63.  
  64. </project>

pom.xml

配置代码根据文件不同格式也不同,一般有application.properties和application.yml两种

  1. spring.application.name=eureka-server1
  2. server.port=10100
  3. eureka.instance.hostname=localhost
  4. # 指示此实例是否应将其信息注册到eureka服务器以供其他人发现。在某些情况下,您不希望发现实例,而您只想发现其他实例。
  5. eureka.client.registerWithEureka=false
  6. # 指示该客户端是否应从eureka服务器获取eureka注册表信息。
  7. eureka.client.fetchRegistry=false
  8. eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  9. eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${server.port}}
  10. # 关闭服务保护机制
  11. eureka.server.enable-self-preservation=false
  12. # 清理无效节点时间间隔(单位毫秒,默认是60*1000)
  13. eureka.server.eviction-interval-timer-in-ms=30000

application.properties

  1. server:
  2. port: 8888
  3.  
  4. eureka:
  5. instance:
  6. hostname: 192.168.1.11
  7. prefer-ip-address: true
  8. client:
  9. registerWithEureka: false
  10. fetchRegistry: false
  11. service-url:
  12. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

application.yml

然后通过浏览器访问:http://localhost:10100  看到下面的界面就说明最简单的注册中心配置成功

二、注册中心集群(Eureka-Servers)------多节点

前面介绍介绍了注册中心的单节点配置过程,下面来介绍一下多节点配置过程,也就是为了使项目达到高可用的目的,进行集群化配置,首先我们来看一下关系图:

图一:Eureka官网

图二:理解一下集群

为了方面看我将上面的单节点注册中心地配置改为4个yml类型的文件

  1. spring:
  2. profiles:
  3. active: peer1
  4. eureka:
  5. server:
  6. # 关闭自我保护模式
  7. enable-self-preservation: false
  8. # 设置清理间隔,单位为毫秒,默认为0
  9. eviction-interval-timer-in-ms: 3000

application.yml

  1. spring:
  2. application:
  3. name: eureka-server1
  4. server:
  5. port: 10101
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://localhost:10102/eureka/,http://localhost:10103/eureka/
  10. instance:
  11. instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

application-peer1.yml

  1. spring:
  2. application:
  3. name: eureka-server2
  4. server:
  5. port: 10102
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://localhost:10101/eureka/,http://localhost:10103/eureka/
  10. instance:
  11. instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

application-peer2.yml

  1. spring:
  2. application:
  3. name: eureka-server3
  4. server:
  5. port: 10103
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://localhost:10101/eureka/,http://localhost:10102/eureka/
  10. instance:
  11. instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

application-peer3.yml

为了方便观察和操作,我的启动方式在1个Idea上启动三个Eureka-Server,具体操作如下:

当只启动1个或两个时,控制台会报错,这是正常的现象,启动完第三个,在控制台会看到类似下面的代码输出:

Registered instance EUREKA-SERVER1/eureka-server1:10101 with status UP (replication=true)

Registered instance EUREKA-SERVER2/eureka-server2:10102 with status UP (replication=true)

Registered instance EUREKA-SERVER3/eureka-server3:10103 with status UP (replication=true)

然后通过浏览器,使用10101,10102,10103任意一个端口去访问都可以看到如下图,说名三节点的Eureka-server注册中心集群搭建完成:

其他服务的配置只需要修改如下代码:

SpringCloud系列------Eureka-Server的更多相关文章

  1. SpringCloud系列——Eureka 服务注册与发现

    前言 Eureka是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移.本文记录一个简单的服务注册与发现实例. GitHub地址:https:/ ...

  2. 创建多模块springcloud应用eureka server和client和消费端demo

    使用环境是 STS + maven 1 创建父级 项目,springcloud-demo1 new -> maven project -> 按照要求进行配置即可.然后删除 src目录,因为 ...

  3. springcloud(四)-Eureka Server集群

    Eureka Server的高可用 这一节我们接着上一节说. 有分布式应用开发经验的朋友应该发现,前文编写的单节点Eureka Server并不适合线上生产环境.Eureka Client会定时连接E ...

  4. SpringCloud启动Eureka server时报错 java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present

    SpringBoot打开Eureka server时出现以下错误: java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext ...

  5. SpringCloud系列——Config 配置中心

    前言 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持.有了配置服务器,您就有了一个中心位置来管理跨所有环境的应用程序的外部属性.本文记录实现一个配置中心.客 ...

  6. SpringCloud系列——Zuul 动态路由

    前言 Zuul 是在Spring Cloud Netflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是Netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和 Netflix ...

  7. SpringCloud系列——Feign 服务调用

    前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调 ...

  8. SpringCloud系列三:将微服务注册到Eureka Server上

    1. 回顾 通过上篇博客的讲解,我们知道硬编码提供者地址的方式有不少问题.要想解决这些问题,服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息.不仅如此,即使服务提供 ...

  9. SpringCloud系列五:为Eureka Server添加用户认证及元数据

    1. 回顾 上一篇博客讲解了Eureka集群及将微服务注册到集群上.在前面的讲解中,Eureka Server都是允许匿名访问的,本次将讲解如何构建一个需要登录才能访问的Eureka Server. ...

  10. SpringCloud系列四:实现Eureka Server的高可用并将应用注册到Eureka Sever集群上

    1. 回顾 上一篇博客中,实现了单节点的Eureka Server.Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地.微服务在消费远程API时总是使用本地 ...

随机推荐

  1. MySQL数据排序asc、desc

    数据排序 asc.desc1.单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多 ...

  2. windows 如何创建硬链接

    输入代码:mklink /d F:\ D:\pdf mklink /d 是命令语句,空格,接着是放置硬链接的位置,空格,再是目标文件夹.

  3. 二进制包安装MYSQL——

    yum install libaio -y #安装mysql依赖包tar zxf mysql-5.5.59-linux-glibc2.12-x86_64.tar.gz mv mysql-5.5.59- ...

  4. Eclipse新建Java工程出现红色感叹号怎么解决?

    安装了新版本的JDK之后,在Eclipse中新建Java工程出现红色感叹号怎么解决? 其实只要在Eclipse中重新设置一下JDK路径就行了 路径:右键Java工程>>Build Path ...

  5. js 二维数组 for 循环重新赋值

    javascript 二维数组的重新 组装 var arr = [[1,2],[3,4],[5,6],[7,8]]; var temp = new Array(); for(var i= 0 ;i&l ...

  6. flutter控件之ExpansionPanelList

    import 'package:flutter/material.dart'; class LearnExpansionPanelList extends StatefulWidget{ @overr ...

  7. Linux sar工具安装使用

    使用sar Sar是后台进程sadc的前端显示工具,安装名为“sysstat”的包后,sadc就会自动从内核收集报告并保存.   安装sar [root@localhost ~]# yum insta ...

  8. rabbitmq安装与高可用集群配置

    rabbitmq版本:3.6.12 rabbitmq安装 1.安装openssl wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz &a ...

  9. Lintcode482-Binary Tree Level Sum-Easy

    482. Binary Tree Level Sum Given a binary tree and an integer which is the depth of the target level ...

  10. hdu 6010 Daylight Saving Time 泰勒公式

    Daylight Saving Time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...