SpringCloudEureka上篇
SpringCloudEureka上篇
- 本文学习自<<重新定义SpringCloud>>
 
Eureka简介
- Eureka是Netflix公司开源的一款服务发现组件,该组件提供的服务发现可以为负载均衡、failover等提供支持。Eureka包括 Eureka Server 和 Eureka Client。Eureka Server提供REST服务,而Eureka Client则是使用Java编写的客户端,用于简化与Eureka Server的交互。
 

服务发现技术选型
- Jason Wilder 在2014年2月的时候写了一篇博客<>,总结了当时市场上的几类服务发现组件
 
| 名称 | 类型 | AP或者CP | 语言 | 依赖 | 集成 | 一致性算法 | 
|---|---|---|---|---|---|---|
| Zookeeper | General | CP | Java | JVM | Client Binding | Paxos | 
| Doozer | General | CP | Go | Client Binding | Paxos | |
| Consul | General | CP | Go | HTTP / DNS library | Raft | |
| Etcd | General | CP or Mixed(1) | Go | Client Binding / HTTP | Raft | |
| SmartStack | Dedicated | AP | Ruby | Zookeeper / Haproxy | Sidekick(never / synapse) | |
| Eureka | Dedicated | AP | Java | JVM | Java Client | |
| NSQ(lookupd) | Dedicated | AP | Go | Client Binding | ||
| Serf | Dedicated | AP | Go | Local CLI | ||
| Spotify | Dedicated | AP | N / A | Bind | DNS library | |
| SkyDNS | Dedicated | Mixed(2) | Go | DNS library / HTTP | 
- 从列表上来看,有很多服务发现组件可以选择,针对AP或者CP,主要选Eureka和Consul作为代表。关于Eureka和Conusl的区别,在Consul的官网有一个很好的阐述(https://www.consul.io/docs/intro/vs/eureka),具体如下:
- Eureka Server 端采用的是P2P的复制模式,但是它不保证复制操作的一定能成功,因此它提供的是一个最终一次性 服务实例视图;Clinet端在Server端的注册信息有一个带期限的租约,一旦Server在指定期间没有收到Client端发送的心跳,则Server端会认为Client端注册的服务是不健康的,定时任务会将其从注册表中删除。Consul和Eureka不同,Consul采用Raft算法,可以提供强一致性的保证,Consul的 agent 相当于 Netflix Ribbon 和NetFlix Eureka Clinet,而且对应于来说相对透明,同时相对于Eureka这种集中式的心跳检测机制,Consul的 agent 可以参与到基于gossip协议的健康检查,分散了Server端的心跳检测压力,除此之外Consul为多数据中心提供了开销即用的原生支持等。那么基于什么样的因素可以考虑Eureka呢?
- 选择AP不是CP的,详细后文会提起。
 - 如果团队是Java体系的,则偏好Java语言开发的,技术体系行比较统一,出问题也比较好排查修复,对组件的掌控力比较强,方便扩展维护。
 - 更主要的是Eureka是Netflix开源套件的一部分,跟Zuul,Ribbon等整合的比较好。
 
 
 - Eureka Server 端采用的是P2P的复制模式,但是它不保证复制操作的一定能成功,因此它提供的是一个最终一次性 服务实例视图;Clinet端在Server端的注册信息有一个带期限的租约,一旦Server在指定期间没有收到Client端发送的心跳,则Server端会认为Client端注册的服务是不健康的,定时任务会将其从注册表中删除。Consul和Eureka不同,Consul采用Raft算法,可以提供强一致性的保证,Consul的 agent 相当于 Netflix Ribbon 和NetFlix Eureka Clinet,而且对应于来说相对透明,同时相对于Eureka这种集中式的心跳检测机制,Consul的 agent 可以参与到基于gossip协议的健康检查,分散了Server端的心跳检测压力,除此之外Consul为多数据中心提供了开销即用的原生支持等。那么基于什么样的因素可以考虑Eureka呢?
 
Eureka入门案例
Eureka Client
启动类
package com.example.demochenspringcloudeurekaclient; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.ConditionalOnEnabledResourceChain;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication
@EnableDiscoveryClient
public class ChenSpringCloudEurekaClientApplication { public static void main(String[] args) {
SpringApplication.run(ChenSpringCloudEurekaClientApplication.class, args);
} }配置文件
server:
port: 9091 spring:
application:
name: chen-eureka-client eureka:
client:
serviceUrl: ## 服务端地址
defaultZone: http://localhost:9092/eureka/
Eureka Server
启动类
package com.example.demochenspringcloudeurekacserver; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class DemochenSpringCloudEurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(DemochenSpringCloudEurekaServerApplication.class, args);
} }配置文件
spring:
profiles:
active: local
jackson:
serialization:
FAIL_ON_EMPTY_BEANS: false
eureka:
server:
use-read-only-response-cache: false
response-cache-auto-expiration-in-seconds: 10
management:
endpoints:
web:
exposure:
include: '*'
## 这是两个配置文件,依此为分割
server:
port: 9092 eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
waitTimeInMsWhenSyncEmpty: 0
enableSelfPreservation: false
代码演示详解
分别启动Eureka Server 和Eureka Client,然后访问Eureka Server的地址(http://localhost:9092/),这便是Eureka的注册中心

Eureka Server的REST API简介
上文已经介绍了最基本的Eureka Server 和Eureka Client,它是SpringCloud生态里面“服务注册和发现”的一个缩影,这里举例的是使用Java语言的Client端的例子,但实际Eureka Server提供了 REST API,允许非Java语言的其他应用服务通过HTTP REST 的方式接入Eureka服务中。
REST API 列表
SpringCloud Netflix Eureka跟SpringBoot整合后,提供的REST PAI 与原始的REST API有一点点不同,其路径中的{version}值固定为eureka,其他变化不大

访问效果图

SpringCloudEureka上篇的更多相关文章
- 看看C# 6.0中那些语法糖都干了些什么(上篇)
		
今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...
 - .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
		
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
 - ASP.NET Core的配置(4):多样性的配置来源[上篇]
		
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...
 - ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
		
出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...
 - 谈谈基于OAuth 2.0的第三方认证 [上篇]
		
对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...
 - Sass-也许你想和CSS玩耍起来(上篇)
		
我们努力,我们坚持,共勉! 众所周知,css其实不是一门编程语言,熟悉的人都知道css全称Cascading Style Sheets(层叠样式表)是一种用来表现HTML(标准通用标记语言的一个应用) ...
 - Aoite 系列(04) - 强劲的 CommandModel 开发模式(上篇)
		
Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.CommandModel 是一种开发模式,我把它成为"命令模型",这是一 ...
 - 那些年我们写过的T-SQL(上篇)
		
在当今这个多种不同数据库混用,各种不同语言不同框架融合的年代(一切为了降低成本并高效的提供服务),知识点多如牛毛.虽然大部分SQL脚本可以使用标准SQL来写,但在实际中,效率就是一切,因而每种不同厂商 ...
 - 用MVVM做了一个保存网页的工具-上篇
		
前言: 你是否有过收藏了别人博客或文章,当想用的时候却找不到?你是否有过收藏了别人博客或文章,却因为没有网络而打不开网页?OK,下面是我做的一个工具,有兴趣的同学们可以download 玩下,哈哈^. ...
 - 【Remoting】.Net remoting方法实现简单的在线升级(上篇:更新文件)
		
一.前言: 最近做一个简单的在线升级Demo,使用了微软较早的.Net Remoting技术来练手. 简单的思路就是在服务器配置一个Remoting对象,然后在客户端来执行Remoting ...
 
随机推荐
- ideal的基础使用2022版本,黑马程序员的基础使用
			
1. 2.配xml <dependencies> <dependency> <groupId>javax.servlet</groupId ...
 - GMAC网卡相关介绍与分析
			
GMAC网卡相关介绍与分析 目录 GMAC网卡相关介绍与分析 环境描述 MII MII RMII GMII RGMII SGMII GMAC网卡信息获取方法 获取GMAC网卡信息 查看PHY工作接口模 ...
 - angr初探
			
前言 在搞fuzz的时候发现了一个比较难以解决的问题.例如if(*buf == "\xde\xad\xbe\xef"),我们如果想通过纯fuzz去进入这个if的分支,那么概率极其微 ...
 - 从零开始使用阿里云OSS服务(白嫖)
			
阿里云对象存储服务OSS使用记录 1 新人免费开通OSS服务 访问 阿里云官网,登录账号(个人新用户账号),首页搜索 对象存储OSS,点击下方的直达. 点击立即开通,此时会在一个新网页中完成开通 完成 ...
 - DevOps 与 FinOps:二者可以协同吗?
			
DevOps 是一个强调开发人员和运营团队之间的协作和自动化以创建更高效的软件开发生命周期的过程.随着云业务成本逐年攀升,甚至超过传统基础设施成本,许多企业开始转向 FinOps 以有效降本增效.Fi ...
 - 记一次 .NET某家装ERP系统 内存暴涨分析
			
一:背景 1. 讲故事 前段时间微信上有一位老朋友找到我,说他的程序跑着跑着内存会突然爆高,有时候会下去,有什么会下不去,怀疑是不是某些情况下存在内存泄露,让我帮忙分析一下,其实内存泄露方面的问题还是 ...
 - PostGIS之几何有效性
			
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...
 - html(Angular) 调用本地安装exe程序
			
1.写注册表 新建 .reg文件 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\creoparametric] "URL P ...
 - LeetCode-1705 吃苹果的最大数目
			
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-eaten-apples 题目描述 有一棵特殊的苹果树,一连 ...
 - 自我生啃 AMBA AXI 总线笔记
			
视频1:https://www.youtube.com/watch?v=1zw1HBsjDH8&list=PLkqJVNOiuuHtNrVaNK4O1BSgczja4obeW (What is ...