springcloud超简单的入门2--Eureka服务治理
Eureka服务治理
下面请听第一个话题,母。。。咳咳,拿错书了。
Eureka简介
eureka是什么呢?
简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务可能会多个实例存在,来对服务分流,就是负载均衡。
所以,我们需要一个位置来存放服务的访问列表,以供消费端来使用,这个东西呢,就可以用eureka来实现。
我们来看一下eureka的相关概念:
相关概念
服务注册(Register)
eureka客户端向Eureka服务器注册时,它提供自身的元数据,比如IP地址,端口信息
服务续约(Renew)
客户端每隔30秒发送一次心跳来进行服务续约。
服务下线(Cancel)
客户端在程序关闭时向服务器发送取消请求,成功该实例将会从服务器注册列表中删除
服务剔除(Eviction)
默认情况下,当客户端连续90秒没有发送心跳请求,服务器就会将该服务实例从服务列表中删除,剔除该服务
获取服务注册列表信息(Fetch Registriers)
客户端从服务器获取服务注册列表信息,并将其缓存在本地。列表信息定期(30秒)更新一次。
不太理解也没关系,我们可以先把架子搭建起来,之后慢慢悟把。
Eureka角色
Eureka中存在三种角色,注册中心,服务提供者,服务消费者。
其中注册中心是Eureka服务端,服务提供者与服务消费者都是客户端。
注册中心服务器
主要进行,服务注册,服务续约和服务下线。就是维护服务列表的东东啦。
让我们一步一步的开始把
- 相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类配置,使用
@EnableEurekaServer注解,启用Eureka服务
@SpringBootApplication
@EnableEurekaServer
public class EurekacenteralApplication {
public static void main(String[] args) {
SpringApplication.run(EurekacenteralApplication.class, args);
} }
- 属性配置
server:
port: 9090 ##UI界面端口
eureka:
instance:
hostname: localhost ##主机名称
client:
register-with-eureka: false ##是否注册到服务中心,因为本身就是服务中心,不需要注册
fetch-registry: false ##是否发现服务
service-url: ##注册中心服务地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动服务,这样一个简单的注册中心就启动起来,浏览器访问http://localhost:9090 就可以看到eureka的监控界面了。
服务提供者
eureka客户端,向外提供服务
- 相关依赖,作为Euraka客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 启动类配置,使用
@EnableEurekaClient注解,启动Eureka客户端
@SpringBootApplication
@EnableEurekaClient
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
- 属性配置(单机时可以通过设置不同端口,来启动多个服务)
server:
port: 8080
eureka:
instance:
prefer-ip-address: true ##使用IP注册服务
client:
register-with-eureka: true #默认就是true,可以不用设置
fetch-registry: true #默认是true,可以不用设置
service-url:
defaultZone: http://localhost:9090/eureka/
spring:
application:
name: microservice-provider
- 服务接口
@RestController
@RequestMapping("/")
public class TestController { @GetMapping("hi/{name}")
public String hi(@PathVariable String name, HttpServletRequest request){ return "hi,welcome "+name+" from port:"+request.getServerPort();
}
}
服务消费者
本质上与提供者为同一类客户端,会在本地缓存一份服务列表信息,会定期更新缓存
- 相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 启动类配置
@SpringBootApplication
public class App { public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 属性配置
server:
port: 8090
eureka:
client:
service-url:
defaultZone: http://localhost:9090/eureka/
register-with-eureka: false ##仅仅作为消费者
fetch-registry: true #默认是true,可以不用设置 ## 多说几句,服务者跟消费者不是绝对的,他们可以同时作为两种角色存在
## register-with-eureka: true
## fetch-registry: true
## 当这两个熟悉都为true的时候,就可以作为两种角色同时存在了,即可以作为提供者,向外提供服务
## 又可以作为消费者,消费服务
- 服务消费,都在代码里,我干了,你随意。
@RestController
@RequestMapping("/")
public class TestController { // 服务只有一个实例运行的时候,一个服务提供者,
// 就算不注册到eureka,我们也可以使用这种方式就行调用
@Resource
RestTemplate restTemplate;
@GetMapping("hi")
public String hi() {
return restTemplate.getForObject("http://localhost:8090/hi/consumer", String.class);
} //当服务有多个实例的时候,我们就可以使用服务发现或获取服务列表,并取其中一个实例进行调用
// 这样才是实际场景,当然还用更简洁的使用方式,我们下次说
@Resource
DiscoveryClient discoveryClient;
//通过服务发现,获取注册中心上注册的服务,获取调用地址,然后调用服务
@GetMapping("hi2")
public String hi2() {
List<ServiceInstance> serviceInstances = discoveryClient
.getInstances("microservice-provider");
if (serviceInstances.size() == 0) return "service has down";
// 这里就是取第一个服务来消费
return restTemplate.getForObject(String.format("%s/hi/consumer", serviceInstances.get(0).getUri()),
String.class);
}
}
springcloud超简单的入门2--Eureka服务治理的更多相关文章
- SpringCloud超简单的入门(1)--一些简单的介绍
简介 简单来说,springcloud的就是由一组springboot应用(服务)组成,相互之间通过REST等方式进行通信. 两个springboot应用,其中一个作为服务提供者,一个作为服务消费者, ...
- springcloud超简单的入门3--负载均衡
上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例.但是,只是简单的通过get(0)来获取列表中的第一个实例来使用. 现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而 ...
- 1 Spring Cloud Eureka服务治理
注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...
- 1 Spring Cloud Eureka服务治理(上)
注:此随笔为读书笔记.<Spring Cloud微服务实战>,想学习Spring Cloud的同伴们可以去看看此书,里面对源码有详细的解读. 什么是微服务? 微服务是将一个原本独立的系统拆 ...
- SpringCloud微服务实战——第三章服务治理
Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...
- Spring cloud Eureka 服务治理(注册服务提供者)
搭建完成服务注册中心,下一步可以创建服务提供者并向注册中心注册服务. 接下来我们创建Spring Boot 应用将其加入Eureka服务治理体系中去. 直接使用签名章节创建hello服务项目改造: 1 ...
- SpringCloud初体验:一、Eureka 服务的注册与发现
Eureka :云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. Eureka 可以大致理解为 房产中介 和 房东 的关系,房东想让租客租房子,首先要把房子 ...
- Spring Cloud 入门教程 - Eureka服务注册与发现
简介 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用.随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果我们每新加一个 ...
- 微服务之SpringCloud实战(二):SpringCloud Eureka服务治理
服务治理 SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCl ...
随机推荐
- Redis集群与spring的整合
上一篇详细的赘述了Redis的curd操作及集群的搭建.下面我们开始将他整合到我们实际的项目中去.我的项目采用的是标准的ssm框架,ssm框架这里不说,直接开始整合. 首先在maven管理中将我们的j ...
- 用xshell链接虚拟机上的linux
[步骤]一.安装VMware直接点击下一步即可 二.安装linux下载CentOS,在VMware中安装,这个网上有很多教程,这里就不赘述了. 三.配置要想连接上xshell,需要配置IP,将Linu ...
- MapReduce on Yarn运行原理
一.概念综述 MapReduce是一种可用于数据处理的编程模型(或计算模型),该模型可以比较简单,但想写出有用的程序却不太容易.MapReduce能将大型数据处理任务分解成很多单个的.可以在服务器集群 ...
- 安全测试基础2-sqlmap演练
sqlmap简介 sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限. 它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括 ...
- scrapy xpath用法
一.实验环境 1.Windows7x64_SP1 2.anaconda3 + python3.7.3(anaconda集成,不需单独安装) 3.scrapy1.6.0 二.用法举例 1.开启scrap ...
- 自定义Dialog---实现优美对话框
PS:自定义dialog,一些系统的dialog已经不能满足开发人员的需求了,所以,我们需要自定义一个属于并且适合自己项目的对话框,无论是颜色还是功能需求上都是和自己的项目紧密相关的,一些系统的对话框 ...
- k8s云集群混搭模式,可能帮你节省50%以上的服务成本
现在大部分中小企业或团队都是使用云平台来部署自己的服务,如阿里云,亚马逊云等.一般来说,业务的负载都具备一定的规律,比如每天集中在某几个小时,或呈现时间段周期性波峰.波谷交替的现象,如下图 如果使用E ...
- Redis集群环境下的键值空间监听事件实现方案
一直想记录工作中遇到的问题和解决的方法,奈何没有找到一方乐土,最近经常反思,是否需要记录平时的点滴,后台还是决定下定决心记录一些,以便以后用到的时候找不着,实现这样的一个功能主要也是业务所需要的. 需 ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8)
8 Feature(特性) 8.1 固件升级过程 固件升级通过重启激活的过程是: 1. 主机发一个Firmware Image Download命令,下载固件映像版本到controller.可能有多个 ...
- 基于随机游走的三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...