SpringCloud学习(二)---Eureka
Eureka
重点在使用,概念和源码基本不涉及
Eureka是一个基于REST(REST是HTTP协议的)的服务,主要在亚马逊网络服务(AWS)云中使用,定位服务来进行中间层服务器的均衡负载和故障转移.
Spring Cloud封装Eureka来实现服务注册和发现,Eureka采用了C-S的设计架构,Eureka Server作为服务注册功能的服务器,是服务注册中心,系统中的其他微服务都是Eureka Client,连接到Eureka Server,并维持心跳连接.这样就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
Eureka由两个组件组成: Eureka Server和Eureka Client. Eureka Server用作服务注册服务器.Eureka Client就是Java客户端,分为两种,一种是Service Provider,一种是Service Consume,但是两者不是严格的概念区分,也就是说一个Service Consume也可以是Service Provider,看实际的场景.
也就是Eureka Server提供服务的注册和发现
Service Provider将自身服务注册到Eureka Server,并保持心跳续约等
Service Consumer从Eureka Server获取注册列表,进行服务消费,也就是通过远程调用与Service Provider进行通信.
搭建Eureka Server
- 创建项目,引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 启动类添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerSmileApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerSmileApplication.class, args);
}
}
- 配置文件
spring:
application:
name: spring-cloud-eureka-server
server:
port: 8761
eureka:
client:
# 是否注册自己
register-with-eureka: false
# 是否从Eureka Server获取注册信息
fetch-registry: false
# 设置与Eureka Server交互的地址,多个地址使用逗号合开,也就是集群
service-url:
default-zone: http://localhost:${server.port}/eureka/
- 启动项目,直接访问http://localhost:8761/就可以看到Eureka Server的主界面,这个时候No instances available.
集群的搭建(3个)
- 创建项目添加依赖(同上)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 启动类添加注解(同上)
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerSmileJqApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerSmileJqApplication.class, args);
}
}
- 配置文件,三个配置文件,第一个个application-master.properties:
server.port=8761
eureka.instance.hostname=master
eureka.client.serviceUrl.defaultZone=http://slave1:8762/eureka/,http://slave2:8763/eureka/
spring.application.name=eureka-server
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
第二个application-slave1.properties
server.port=8762
eureka.instance.hostname=slave1
eureka.client.serviceUrl.defaultZone=http://master:8761/eureka/,http://slave2:8763/eureka/
spring.application.name=eureka-server
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
application-slave2.properties
server.port=8763
eureka.instance.hostname=slave2
eureka.client.serviceUrl.defaultZone=http://master:8761/eureka/,http://slave1:8762/eureka/
spring.application.name=eureka-server
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
之后找到本地的hosts文件,推荐使用everything软件,可以搜索全盘,找到hosts文件添加下面内容:
127.0.0.1 master
127.0.0.1 slave1
127.0.0.1 slave2
进行打包,运行
mvn clean package
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=master
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=slave1
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=slave2
启动完成后进行访问就可以看到效果,这次进行了注册.
服务注册与调用实战
这个就要说到上面的Eureka的三个角色,一个注册中心,一个服务提供者,一个服务消费者,也就是Eureka Server,Service Provider(案例中拼错了,写成producter了,谅解),Service Consumer.中间还还涉及到远程过程调用Feign,这里只需要看一下就好,后面再说这个.
- 创建Eureka Service项目,添加依赖,添加注解,修改配置文件如下展示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
@SpringBootApplication
@EnableEurekaServer
public class ServerSmileDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ServerSmileDemoApplication.class, args);
}
}
server.port=8761
spring.application.name=eureka-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka/
- 创建提供者,依次依赖,注解,配置文件,最后写个controller
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProducterDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProducterDemoApplication.class, args);
}
}
server.port=9000
spring.application.name=eureka-service-producter
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
@RestController
public class HelloController {
/** 看的博客上出现了Request method ‘POST’ not supported问题,因为没有添加@RequestParam注解,说是不添加那个注解就是post请求,就算是用GetMapping指定了还是POST请求,这个本人没有测试 */
@GetMapping("hello")
public String hello(@RequestParam String name){
return "hello," + name + "1111111";
}
}
- 创建消费者,添加依赖(这个需要添加feign的依赖),后面依次
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceConsumerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerDemoApplication.class, args);
}
}
server.port=9010
spring.application.name=eureka-service-consumer
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
@RestController
public class ConsumerController {
@Autowired
private HelloRemote helloRemote;
@GetMapping("/hello/{name}")
public String hello(@PathVariable("name") String name){
return helloRemote.hello(name);
}
}
上面按照顺序启动,先启动注册中心,然后启动提供者,最后启动消费者,访问的时候访问消费者的hello,就可以访问到提供者的hello了.
负载均衡
feign有负载均衡的作用(feign是基于Ribbon实现的,所以自带客户端负载均衡功能),在上面的基础之上,再次创建个提供者,与上面提供者不同的是端口号和controller稍微变下,具体代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
server.port=9001
spring.application.name=eureka-service-producter
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProducterDemo1Application {
public static void main(String[] args) {
SpringApplication.run(ServiceProducterDemo1Application.class, args);
}
}
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(@RequestParam String name){
return "hello," + name + "222222";
}
}
之后同时启动四个项目,看注册中心就能看到EUREKA-SERVICE-PRODUCTER后有两个服务,之后访问http://localhost:9010/hello/wangzhi就可以看到hello,wangzhi1111111和hello,wangzhi222222交替出现,这个就是负载均衡了.
到这Eureka基本就结束了我没有看源码,这个说明下,还有人说Eureka闭源了,其实并不是,只是不继续开发2.X版本,1.X版本还在更新维护呢.而且现在阿里开源了Nacos,这个也是可以替代Eureka的,所以说替代方案还是有的.
SpringCloud学习(二)---Eureka的更多相关文章
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- SpringCloud学习(3)——Eureka服务注册中心及服务发现
Eureka概述: Eureka是Netflix的一个子模块, 也是核心模块之一.Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务框 ...
- SpringCloud 学习(二)-2 :Securing The Eureka Server
由于工作等种种原因未能连续进行学习,现在继续学习微服务,不过是新建的demo,springcloud版本用的是Finchley.SR2. 之前用简单demo实现了注册中心,现在来对注册中心加安全验证: ...
- SpringCloud 学习(二) :服务注册与发现Eureka
Spring Cloud应用中可以支持多种的服务治理框架,比如Eureka.Consul.Zookeeper等,现在我们用的是consul,本文以SpringCloud Dalston.SR5版本介绍 ...
- SpringCloud 学习(二)-1 :服务注册与发现Eureka扩展
上一篇介绍了Eureka Server的搭建跟配置.Eureka Client的搭建跟配置.服务间通过服务名调用等,还有几个实际实验中遇到的问题及处理方案,本篇来玩一下Eureka的其他配置. 上一篇 ...
- SpringCloud学习之—Eureka集群搭建
Eureka集群的搭建 上次说过了在SpringCloud应用中使用Eureka注册中心,用来对服务提供者进行服务注册与发现,但同时,它也是一个"微服务",单个应用使用空间有限,因 ...
- SpringCloud学习:Eureka、Ribbon和Feign
Talk is cheap,show me the code , 书上得来终觉浅,绝知此事要躬行.在自己真正实现的过程中,会遇到很多莫名其妙的问题,而正是在解决这些问题的过程中,你会发现自己之前思维的 ...
- SpringCloud学习笔记-Eureka基础
Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的微服务治理功能. 服务端 ...
- SpringCloud学习之eureka集群配置
一.集群方案及部署思路: 如果是单节点的注册中心,是无法保证系统稳定性的,当然现在项目部署架构不可能是单节点的. 集群节点的部署思路:通过运行多个实例并请求他们相互注册,来完成注册中心的高可用性(结伴 ...
随机推荐
- HNOI2019 爆零记
HNOI2019爆零记 day \(-inf\) ~ day \(0\) 开学一周之后才停的课,停课之后就开始每天被包菜.我三月份几乎没有更博,就是因为每天都被虐的自闭了. day \(0\) 本来是 ...
- Quartz_简单使用
第一步:安装 新建一个QuartzDemo项目后,安装下面的程序包 Install-Package Quartz Install-Package Common.Logging.Log4Net1211 ...
- RSA公钥文件解密密文的原理分析
前言 最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析 对于rsa算法的公钥与私钥的产生,我们可以了 ...
- Redis常用操作-----字符串
1.APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾. 如果 key 不存在, APPEND 就简单地将给定 ...
- part 1
注意:本次源码分析选择2.0.3(因为不支持IE6.7.8,就少了很多兼容的hack的写法,对了解jQuery的实现原理有很大的帮助) 1.jQuery有不同的版本,从2.x版本便不再支持IE6.7. ...
- 理解Vue 2.5的Diff算法
DOM"天生就慢",所以前端各大框架都提供了对DOM操作进行优化的办法,Angular中的是脏值检查,React首先提出了Virtual Dom,Vue2.0也加入了Virtual ...
- pair work结对编程(张艺 杨伊)
一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点: 优点: 1.结对编程时间紧密,在一定程度上可以督促双方学习,提高 ...
- Voltage Keepsake CodeForces - 801C (思维+二分)
题目链接 这是一道很棒的二分题. 思路: 首先先思考什么情况下是可以无限的使用,即输出-1. 我们思考可知,如果每一秒内所有设备的用电量总和小于等于充电器每秒可以充的电,那么这一群设备就可以无限使用. ...
- servlet请求转发
来源:http://www.2cto.com/kf/201610/554591.html 请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目 ...
- HDU 2024 C语言合法标识符
http://acm.hdu.edu.cn/showproblem.php?pid=2024 Problem Description 输入一个字符串,判断其是否是C的合法标识符. Input 输入 ...