Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态)。使用Spring Cloud开发人员可以快速地完成实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作

Eureka

学过 Dubbo 的一定不会陌生 ZooKeeper ,那么学 Spring Cloud 的就不能陌生 Eureka。它是 Netflix 开源的一款基于REST(Representational State Transfer)风格的服务发现框架,目前已被 Spring Cloud 集成在其子项目 spring-cloud-netflix 中,用于 Spring Cloud 的服务注册发现功能。

  • 纯正的 Servlet 应用,jar/war 包部署
  • 使用 Jersey 框架实现自身的 RESTful HTTP 接口
  • peer 之间的同步与服务的注册全部通过 HTTP 协议实现
  • 利用 JDK Timer 实现 心跳检测、定时清理过期服务、节点同步等功能(动态添加删除节点、弹性)
  • 使用 Google 的 guava 包管理内存缓存
  • 目前 2.0 已经停止开源,但在 Finchley 版中 Spring Cloud 所采用的是 1.9.x 版本(持续维护),所以完全不用担心,同时 Spring Cloud 还提供了 EurekaConsulZooKeeperEtcd 等多款服务注册发现功能的框架,完全不用担心会在一棵树上吊死

Eureka 的 Server 与 Client

  • Eureka Server: 提供服务注册与发现,Client 节点启动后,会向 Eureka Server 发送注册事件,Eureka Server 注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。基于 Jersey 框架实现自身的 RESTful HTTP 接口,只要满足规范任何语言程序都能向其进行注册
  • Eureka Client: 任何形式的客户端,只要满足 Eureka Server 订制的注册标准。

你好 Eureka Server

搭建一个 Eureka Server 是最为容易的,只需要一个依赖即可完成。在 Finchley 版本中 artifactId 与早期的有所差异,所以大家在使用 Spring Cloud 一定要注意自己所使用的版本,如果询问它人相关问题,也应该告知对方你所采用的版本

依赖

1
2
3
4
5
6
7
<!-- 此处我只给出了 Eureka Server 需要用到的包依赖,
为了篇幅考虑 spring-boot-starter-parent 及 spring-cloud-dependencies
并未将其粘贴出来,有需要的可以点击文末的 GITHUB 连接进去 copy -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

配置文件

在 src/main/resources 目录下创建一个 bootstrap.yml 的文件,文中我已经将部分需要注意的配置项罗列出来,并附写好相关说明,更多配置可以参考 EurekaInstanceConfigBean 、 EurekaClientConfigBean 、 EurekaServerConfigBean 。绝大多数情况下对于 Eureka Server 只需了解每个配置的作用及其意义即可,因为错误的配置反而会破坏原有的保护特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server:
port: 7071
eureka:
instance:
prefer-ip-address: true
# 生产环境中官方是不建议修改默认配置,因为那样会破坏 eureka server 的保护模式
server:
# 关闭保护模式(生产环境不建议修改)
enable-self-preservation: false
# 清理间隔(默认是60 * 1000 毫秒)(生产环境不建议修改)
eviction-interval-timer-in-ms: 60000
# Eureka 拉取服务列表时间(默认:30秒)(生产环境不建议修改)
remote-region-registry-fetch-interval: 5
client:
# eureka server 没必要自己把自己注册上去,所以可以设置成 false
register-with-eureka: false
# 是否从Eureka Server上获取注册信息,默认为true,此处建议修改成 false (单机设置的意义不大,如果设置成 true 启动会去抓取一次注册表,获取不到更新缓存就会出错(该错误不影响 eureka 正常使用))
fetch-registry: false
service-url:
# 默认注册地址 this.serviceUrl.put("defaultZone", "http://localhost:8761/eureka/");
# 划重点:此处的 defaultZone 千万别写成 default-zone
defaultZone: http://localhost:${server.port}/eureka/
# 从 Eureka 服务器端获取注册信息的间隔时间(默认:30秒)
registry-fetch-interval-seconds: 5

主函数

与往常 Spring Boot 启动类类似,不同的是多了一个 @EnableEurekaServer 注解,用来标识当前工程是Eureka Server,到此我们 Server 就算是搭建完成了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.battcn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /**
* @author Levin
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer { public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}

访问 http://localhost:7071/ 能看到如下内容就代表项目搭建成功,图中红色的表示我们关闭了 Eureka 保护模式,在网络波动的情况下 Eureka Server 可能无法及时的保护客户端实例

Eureka Server UI

你好 Eureka Client

搭建一个 Eureka Client 也是相当容易的,只需要两个小小的依赖即可完成。

依赖

1
2
3
4
5
6
7
8
9
10
11
<!-- 此处我只给出了 Eureka Server 需要用到的包依赖,
为了篇幅考虑 spring-boot-starter-parent 及 spring-cloud-dependencies
并未将其粘贴出来,有需要的可以点击文末的 GITHUB 连接进去 copy -->
<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>

配置文件

下面罗列一部分需要注意的配置项,需要注意的都已经写好相关说明,更多配置可以参考 EurekaInstanceConfigBean 、 EurekaClientConfigBean 、 InetUtilsProperties 以下配置适用于大部分情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server:
port: 7072
# 如果不写 Eureka Server 中的界面中 Application 就会是 Unknown 尽量写
spring:
application:
name: eureka-client
cloud:
inetutils:
# 忽略指定网卡(支持正则),假设你的电脑有 VM 那么该选项是非常有用的一个选项
ignored-interfaces: #忽略 docker0 网卡以及 veth 开头的网卡
- docker0
- veth.*
preferred-networks: # 使用指定网络地址,选择 eth0 网卡,当然也可以直接写 IP (192.168)
- eth0
eureka:
instance:
# 此处建议写,不写默认是机器名
prefer-ip-address: true
# 优先级小于 application.properties ,如果你想知道当前注册上去的版本必须使用 application.properties 中的配置写法
# 因为 bootstrap.yml 最早初始化,那时候还无法读取到 pom.xml 中的属性
instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
# ip-address 强行指定此实例 IP ,不是很推荐,绝大多数情况 prefer-ip-address 与 preferred-networks 配合都够用了
client:
service-url:
# 划重点:此处的 defaultZone 千万别写成 default-zone
defaultZone: http://localhost:7071/eureka/

扩展知识

如果你觉得 Eureka Server UI 中默认显示的 instance-id 让你看着不爽,你可以试着在根目录下创建一个 application.properties 填写如下内容,因为Spring Cloud 和 Spring Boot 启动装载的配置有优先级之分,bootstrap 文件优先于 application 文件之前装载,所以一些配置只在 application 中生效

1
2
3
4
5
# 默认值:XB-201704242009:eureka-client:7072
# 修改前(bootstrap 配置的 instance-id):192.168.13.22:7072
# 修改后(application 配置的 instance-id):192.168.13.22:7072:0.0.1-SNAPSHOT
# 是不是后者更为直观,如果要用 @project.version@ 那么必须在 pom.xml 插件做一下小小的配置,具体请看 GITHUB ,当然如果你不需要显示 version 那么该文件你可以忽略
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}:@project.version@

主函数

与往常 Spring Boot 启动类类似,不同的是多了一个 @EnableDiscoveryClient 注解,用来标识当前工程是Discovery Client。因为 Spring Cloud 提供了非常多的服务注册发现的组件,如 euerkazookeeperconsuletcd、所以为统一标识客户端身份,所以它用的是 @EnableDiscoveryClient 注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.battcn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /**
* @author Levin
*/
@EnableDiscoveryClient
@SpringBootApplication
public class MyEurekaClient { public static void main(String[] args) {
SpringApplication.run(MyEurekaClient.class, args);
}
}

Eureka Server UI

认识Eureka (F版)的更多相关文章

  1. 基于Ubuntu12.04-server版的openstack F版搭建步骤

    本文为双节点搭建,分为计算(IP1)和控制节点(IP2) 说明: 计算节点组件: 1.mysql 2.keystone 3.Nova 4.glance 5.rabbitmq 控制节点组件: 1.cin ...

  2. 趣味编程:CPS风格代码(C#,F#版)

    CPS风格代码(C#版) using System; namespace fp { class CPS { static int add(int x, int y) => x + y; stat ...

  3. Feign拦截器应用 (F版)

    Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态).使用Sprin ...

  4. 注解式HTTP请求Feign (F版)

    Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态).使用Sprin ...

  5. Ribbon软负载 (F版)

    Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态).使用Sprin ...

  6. Spring cloud Eureka错误锦集(二)

    最近学习spring cloud,在测试Eureka作为服务注册中心的时候碰到了问题,错误提示如下: "D:\Program\Java\JDK1.8\bin\java" -XX:T ...

  7. 白话SpringCloud | 第二章:服务注册与发现(Eureka)-上

    前言 从本章节开始,正式进入SpringCloud的基础教程.从第一章<什么是SpringCloud>中我们可以知道,一个微服务框架覆盖的东西是很多的,而如何去管理这些服务或者说API接口 ...

  8. SpringCloud学习笔记-Eureka基础

    Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的微服务治理功能. 服务端 ...

  9. OpenStack G版以后的Availability Zone与Aggregate Hosts

    关于Availability Zone与Aggregate Hosts的概念解析,可以参考这篇文章:http://blog.chinaunix.net/uid-20940095-id-3875022. ...

随机推荐

  1. Java实现 LeetCode 371 两整数之和

    371. 两整数之和 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: ...

  2. Java实现 LeetCode 61 旋转链表

    61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ...

  3. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

  4. Python之Flask框架二

    今天接着上一篇继续写一篇关于flask的随笔. 本文大纲: 1.获取请求参数 2.一个函数处理多个请求方式 3.重定向 4.错误响应 5.全局错误处理 6.返回json格式数据 7.自定义返回内容状态 ...

  5. Windows下虚拟机Linux(CentOS8)扩容设置 - 磁盘扩容中的坑和解决方法

    摘要:[原创]转载请注明作者Johnthegreat和本文链接 由于虚拟机空间不足,为了避免重装虚拟机,做了一次无损扩容.   过程中的报错如下: [root@localhost ~]# pvcrea ...

  6. Android事件传递机制总结

    Android中控件的分类 Activity dispatchTouchEvent(MotionEvent e) onTouchEvent(MotionEvent e) ViewGroup(View) ...

  7. ModelAndView的部分回顾

    ModelAndView的部分回顾 //@RestController @Controller //@SessionAttributes("user") //把modelandvi ...

  8. PCB制图--VCC、VDD、VEE、VSS、VDDA、VSSA

    VDDA为所有的模拟电路部分供电,包括: ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等.即使不 使用ADC功能,也需要 ...

  9. Debian安装NVIDIA显卡驱动

    1. sudo apt-get install nvidia-detect nvidia-detect 输出信息: Detected NVIDIA GPUs: 01:00.0 VGA compatib ...

  10. vue2.0+Element UI 表格前端分页和后端分页

    之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...