spring cloud(二)之注册中心(EUREKA)
2018-01-11 15:47
369 查看
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry(注册中心)和Service Discovery(发现服务)实现。也是springcloud体系中最重要最核心的组件之一。
服务中心
服务中心又称注册中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。
有了服务中心调用关系会有什么变化,画几个简图来帮忙理解
项目A调用项目B
正常调用项目A请求项目B
有了服务中心之后,任何一个服务都不能直接去掉用,都需要通过服务中心来调用
项目A调用项目B,项目B在调用项目C
这时候调用的步骤就会为两步:第一步,项目A首先从服务中心请求项目B服务器,然后项目B在从服务中心请求项目C服务。
上面的项目只是两三个相互之间的简单调用,但是如果项目超过2
4000
0个30个呢,在15年底的时候我司分布式的项目就达到了二十几个,画一张图来描述几十个项目之间的相互调用关系全是线条,任何其中的一个项目改动,就会牵连好几个项目跟着重启,巨麻烦而且容易出错。通过服务中心来获取服务你不需要关注你调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。
由于各种服务都注册到了服务中心,就有了去做很多高级功能条件。比如几台服务提供相同服务来做均衡负载;监控服务器调用成功率来做熔断,移除服务列表中的故障点;监控服务调用时间来对不同的服务器设置不同的权重等等。
Eureka
按照官方介绍:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.
Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。
Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
用一张图来认识以下:
上图简要描述了Eureka的基本架构,由3个角色组成:
1、Eureka Server
提供服务注册和发现
2、Service Provider
服务提供方
将自身服务注册到Eureka,从而使服务消费方能够找到
3、Service Consumer
服务消费方
从Eureka获取注册服务列表,从而能够消费服务
一、创建一个注册中心
在pom.xml中引入依赖的jar包
在资源文件目录下创建一个application.yml(该文件格式非常严谨 不能使用tab键 必须使用空格 此格式和树结构类似 一行中不能有多余不必要的符号)
启动服务注册中心
在浏览器中输入http://localhost:8761/ 就可以查看注册中心(此时注册中心还没有服务注册上去 接下来我们试着往注册中心注册服务)
此监控中心还可以设置账号密码来控制权限 在application.yml中修改为
并在pom.xml中增加添加依赖
如图
二、在创建一个项目用于往注册中心注册(发送邮件为例)
1.在pom.xml中引入依赖的jar包
2.在资源文件目录下创建一个application.properties文件
3.程序
4.启动服务往注册中心注册
把服务的application.properties文件中的端口改为8081并在此启动 这样就注册了两个服务在注册中心(如下图)
<
ba10
/div>
背景介绍
服务中心服务中心又称注册中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。
有了服务中心调用关系会有什么变化,画几个简图来帮忙理解
项目A调用项目B
正常调用项目A请求项目B
有了服务中心之后,任何一个服务都不能直接去掉用,都需要通过服务中心来调用
项目A调用项目B,项目B在调用项目C
这时候调用的步骤就会为两步:第一步,项目A首先从服务中心请求项目B服务器,然后项目B在从服务中心请求项目C服务。
上面的项目只是两三个相互之间的简单调用,但是如果项目超过2
4000
0个30个呢,在15年底的时候我司分布式的项目就达到了二十几个,画一张图来描述几十个项目之间的相互调用关系全是线条,任何其中的一个项目改动,就会牵连好几个项目跟着重启,巨麻烦而且容易出错。通过服务中心来获取服务你不需要关注你调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。
由于各种服务都注册到了服务中心,就有了去做很多高级功能条件。比如几台服务提供相同服务来做均衡负载;监控服务器调用成功率来做熔断,移除服务列表中的故障点;监控服务调用时间来对不同的服务器设置不同的权重等等。
Eureka
按照官方介绍:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.
Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。
Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
用一张图来认识以下:
上图简要描述了Eureka的基本架构,由3个角色组成:
1、Eureka Server
提供服务注册和发现
2、Service Provider
服务提供方
将自身服务注册到Eureka,从而使服务消费方能够找到
3、Service Consumer
服务消费方
从Eureka获取注册服务列表,从而能够消费服务
案例实践(创建一个注册中心并把服务往注册中心注册)
一、创建一个注册中心在pom.xml中引入依赖的jar包
<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>cn.et</groupId> <artifactId>SPRINGCLOUD_EUREKASERVER</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <!-- 注册中心 --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project>
在资源文件目录下创建一个application.yml(该文件格式非常严谨 不能使用tab键 必须使用空格 此格式和树结构类似 一行中不能有多余不必要的符号)
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/#服务注册的地址 该地址用于服务的注册
启动服务注册中心
package cn.et; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; //注册中心 @SpringBootApplication @EnableEurekaServer public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
在浏览器中输入http://localhost:8761/ 就可以查看注册中心(此时注册中心还没有服务注册上去 接下来我们试着往注册中心注册服务)
此监控中心还可以设置账号密码来控制权限 在application.yml中修改为
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ security: basic: enabled: true user: name: 123 password: 123
并在pom.xml中增加添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>4.2.1.RELEASE</version> </dependency>
如图
二、在创建一个项目用于往注册中心注册(发送邮件为例)
1.在pom.xml中引入依赖的jar包
<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>cn.et</groupId> <artifactId>SPRINGBOOT-SENDMAIL</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 发送邮件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- 发布到注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> </project>
2.在资源文件目录下创建一个application.properties文件
#字符集有时候启动会报错 建议可以不用加 spring.mail.default-encoding=UTF-8 #是smtp服务器的地址 spring.mail.host=smtp.126.com #发送者的邮箱密码 开通smtp的令牌密码 spring.mail.password=123 #邮箱的端口 spring.mail.port=25 #通过何种协议发送 spring.mail.protocol=smtp #发送者的邮箱账号 spring.mail.username=p1193@126.com #注册到注册中心的地址 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #服务注册到注册中心的名字 名字包含了ip地址和端口 spring.application.name=email #服务程序的端口 server.port=8082
3.程序
package cn.et; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Mailcontroller { @Autowired JavaMailSender jms; @GetMapping("/send") public String send(){ SimpleMailMessage smm=new SimpleMailMessage(); //发送者 smm.setFrom("p1193@126.com"); //接收者 smm.setTo("接收者邮箱名"); //标题 smm.setSubject("测试邮件"); //内容 smm.setText("hello"); jms.send(smm); return "发送成功"; } }
4.启动服务往注册中心注册
package cn.et; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
把服务的application.properties文件中的端口改为8081并在此启动 这样就注册了两个服务在注册中心(如下图)
<
ba10
/div>
相关文章推荐
- 【Spring Cloud】一、Eureka Server 服务注册中心服务端启动
- spring cloud-实现Eureka注册中心的HA
- spring cloud-实现Eureka注册中心的HA
- spring cloud-实现Eureka注册中心的HA
- Spring Cloud 入门 分布式注册中心Eureka Server 使用
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用搭建
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费
- Spring Cloud 基于eureka 服务注册中心
- Spring Cloud系列一 之 eureka服务注册中心
- 【Spring Cloud】二、Eureka Client 服务注册中心客户端启动注册服务
- Spring Cloud 注册中心Eureka
- spring cloud 学习(2) - eureka server注册中心高可用及安全认证
- spring cloud实现Eureka注册中心的HA的方法
- Spring Cloud (19) | Eureka Server 高可用服务注册中心
- 【Spring Cloud】Eureka服务注册中心搭建
- (2-1)SpringCloue-Eureka实现高可用注册中心
- 【Spring Cloud】--注册中心Eureka的高可用配置
- (二)Eureka,注册中心,服务者,消费者(Ribbon,Feign)
- 注册中心 Eureka 源码解析 —— 调试环境搭建
- 【公益】开放一台Eureka注册中心给各位Spring Cloud爱好者