SpringCloud-服务的注册与发现(Eureka)
SpringCloud 简介
SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。SpringCloud是基于SpringBoot的。
服务注册发现Eureka
Eureka,是Netfix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行AWS域中的中间服务层,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将它集成在其他子项目spring-cloud-netflix中,以实现spring cloud服务发现功能
Eureka原理
AWS中的几个概念
Region:AWS云服务在全球不同的地方都有数据中心,比如北美、南美和欧洲亚洲等。与此对应,根据地理位置我们把某个地区的基础设施服务集合称为一个区域。不同区域之间是相互独立的。说白了就类似于不同地方的机房。
Available Zone:基于容灾背景提出,简单而言,就是相同region区域不同的机房
服务注册到Eureka
每30s发送心跳监测重新进行租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中心移除。
注册信息和更新会被复制到其他Eureka节点,来自任何区域的客户端可以查找到注册中心信息,每30s发生一次复制来定位他们的服务,并进行远程调用
客户端还可以缓存一些服务实例信息,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的
项目搭建
先创建一个maven主工程

下一步

填写GroupId、ArtifactId,下一步

选择maven路径,选择settings, maven配置文件,下一步

填写项目名称、项目所在路径,Finish
配置一下私服,pom中加入
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories> <pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
然后创建两个model工程:一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client
先来创建注册中心

下一步

下一步

选择1.5.13版本的SpringBoot,下一步

注册中心创建完成,pom文件如下
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.SpringCloud.eureka</groupId>
<artifactId>eureka-registry</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-registry</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build></project>
在启动类上加入eureka注解如下,表明此应用是eureka的注册中心
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication { public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类加上
Eureka是一个高可用组件,他没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下eureka server也是一个eureka client,必须要指定一个server。Eureka server的配置文件application.yml如下
#可以加入安全校验,设置对应的用户名密码即可,pom中需要引入相应的包
security:
basic:
enabled: true
user:
name: admin
password: 123456 server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
#defaultZone: http://user:password@localhost:8761/eureka
通过eureka.client.registerWithEureka: false 和fetchRegistry: false来表明自己是一个eureka server
在父级项目pom中引入module,如下
<modules>
<module>eureka-registry</module>
</modules>
启动后界面如下

创建Eureka Client



完成,pom如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.SpringCloud.eureka</groupId>
<artifactId>eureka-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>eureka-client</name>
<description>eureka-client-description</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR3</spring-cloud.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
在项目启动类上加注解,如下
@RestController
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
} @Value("${server.port}")
String port; @GetMapping("/hello")
public String helloEureka(String name){
return "hello,eureka:" + name + ", i am from port:" + port;
}
}
加上@EnableEurekaClient表明自己是eureka client
application.yml如下
spring:
application:
name: eureka-client
server:
port: 8762
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
设置应用名称,服务端口,注册中心地址,spring.application.name这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name。
在父级项目用引入module,如下
<modules>
<module>eureka-registry</module>
<module>eureka-client</module>
</modules>
启动client项目,发现已经注册到注册中心,端口为8762如下图

此时在浏览器请求
http://localhost:8762/hello

补充:
eureka.client.allow-redirects:是否允许重定向Eureka客户端请求到其他或者备份服务器,默认为fasle
eureka.client.eureka-connection-idle-timeout-seconds:HTTP连接到eureka服务器可以在关闭之前保持空闲的时间(几秒钟)。
eureka.client.eureka-server-connect-timeout-seconds:表示连接Eureka服务器,等待多长时间算超时
eureka.client.eureka-server-port: Eureka Server端口
eureka.client.eureka-server-d-n-s-name:获取要查询的DNS名称以获得eureka服务器的列表。
eureka.client.eureka-server-read-timeout-seconds:示在从eureka服务器读取数据之前需要等待多长时间(以秒为单位)
eureka.client.eureka-server-total-connections:从eureka客户端到所有eureka服务器的所允许连接总数。
eureka.client.eureka-server-total-connections-per-host:设置每一个主机所允许的到Eureka Server连接的数量
eureka.client.fetch-registry: 是否允许客户端向Eureka 注册表获取信息,一般服务器为设置为false,客户端设置为true
eureka.client.register-with-eureka:是否允许向Eureka Server注册信息,默认true,如果是服务器端,应该设置为false
eureka.client.fetch-remote-regions-registry:逗号分隔的区域列表,用于获取eureka注册信息
eureka.client.g-zip-content:从服务器端获取数据是否需要压缩
eureka.client.prefer-same-zone-eureka: 是否优先使选择相同Zone的实例,默认为true
eureka.client.registry-fetch-interval-seconds:多长时间从Eureka Server注册表获取一次数据,默认30s
eureka.client.service-url:可用区域映射,列出完全合格的url与eureka服务器通信。每个值可以是一个URL,也可以是一个逗号分隔的替代位置列表。
eureka.dashboard.enabled: 是否启用Eureka首页,默认为true
eureka.dashboard.path: 默认为/
eureka.instance.appname:在eureka注册的应用程序的名称。
eureka.instance.app-group-name:在eureka注册的应用程序的组名称
eureka.instance.health-check-url: 健康检查绝对路径
eureka.instance.health-check-url-path:健康检查相对路径
eureka.instance.hostname:设置主机名
eureka.instance.instance-id:设置注册实例的id
eureka.instance.lease-expiration-duration-in-seconds:设置多长时间意味着租约到期,默认90
eureka.instance.lease-renewal-interval-in-seconds:表示Eureka客户端需要发送心跳到eureka服务器的频率(以秒为单位),以表明它仍然存在。指定的期间内如果没有收到心跳leaseExpirationDurationInSeconds
eureka.instance.metadata-map:可以设置元数据
eureka.instance.prefer-ip-address: 实例名以IP,但是建议hostname,默认为false
SpringCloud-服务的注册与发现(Eureka)的更多相关文章
- SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(转载)
SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本) 转载请标明出处:http://blog.csdn.net/forezp/article/details ...
- SpringCloud-微服务的注册与发现Eureka(二)
一.SpringCloud简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...
- SpringCloud-微服务的注册与发现Eureka
一.SpringCloud简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...
- 服务的注册与发现Eureka(二)
1.服务治理概念 在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用.负载均衡.容错等,实现服务发现与注册. 2.服务的注册与 ...
- SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
一.spring cloud简介 鉴于<史上最简单的Spring Cloud教程>很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEAS ...
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 本文出自方志朋的博客 一.spring ...
- SpringCloud学习(一)服务的注册与发现Eureka(Finchley版本)
创建服务注册中心 在这里,我还是采用Eureka作为服务注册与发现的组件. 首先创建一个空项目 首先创建一个空项目,再创建一个maven项目,首先创建一个主Maven工程,在其pom文件引入依赖,sp ...
- 创建服务的注册与发现 Eureka (四)
一.eureka注册中心 1.创建一个工程 工程名:microservicecloud-eureka-7001 2.向pom文件中增加如下: <dependencies> <!--e ...
- 第一篇:服务的注册与发现Eureka(Finchley版本)
一.创建服务注册中心(Eureka) 1. 首先创建一个maven主工程 创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Clo ...
- 微服务深入浅出(3)-- 服务的注册和发现Eureka
现来说一些Eureka的概念: 1.服务注册 Register 就是Client向Server注册的时候提供自身元数据,比如IP和Port等信息. 2.服务续约 Renew Client默认每隔30s ...
随机推荐
- Atitit.jdk java8的语法特性详解 attilax 总结
Atitit.jdk java8的语法特性详解 attilax 总结 1.1. 类型推断这个特别有趣的.鲜为人知的特性1 2. Lambda1 2.1. 内部迭代意味着改由Java类库来进行迭代,而不 ...
- Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js
Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js 原理 通过vm带入启 ...
- gitlab配置smtp时,总是提示需要鉴权,记录一下爬坑过程。
配置好smtp,然后发送邮件时总是提示 Net::SMTPFatalError: 550 5.7.1 authentication is required 最后发现是因为在gitlab web界面上配 ...
- AI关注的网址
中科院计算技术研究所博士招生:http://admission.ucas.ac.cn/info/ZhaoshengDanweiDetail/9adf9e50-424b-44c8-b2dc-900ef9 ...
- linux无线网络配置_转
转自:http://www.cnblogs.com/dartagnan/archive/2010/12/05/2003521.html 一位资生linux 原文:http://www.hpl.hp ...
- ubuntu 16.04安装visual studio code 提示libnss3版本低:NSS >= 3.26 is required
Linux Ubuntu 1604安装VS CODE之后,执行./code报错误: [3781:0914/160851.489979:FATAL:nss_util.cc(632)] NSS_Versi ...
- Unity5 怎样做资源管理和增量更新
工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...
- B. Worms Codeforces Round #271 (div2)
B. Worms time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- centos7.0 关闭防火墙
1.关闭firewall:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止fire ...
- jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色
jQuery的min版本和原版功能是一样的,min版主要应用于已经开发成的网页中,而非min版 的文件比较大,里面有整洁的代码书写规范和注释,主要应用于脚本开发过程当中. JQuery是继protot ...