SpringCloud-服务注册与发现(注册中心)
SpringCloud-服务注册与发现(注册中心)
作者 : Stanley 罗昊
【转载请注明出处和署名,谢谢!】
注:作者使用IDEA + Gradle
注:需要有一定的java&&SpringBoot或SSM基础
SpringCloud是做什么的?
其实springcloud是基于springboot,在springboot基础之上加入了一些第三方的组件或是一些自己的组件,进行了一个分布式的扩展;
当然,它的组件非常多,在接下来的博文分享中,我将会陆续连载出来比较重要的一些组件;
注册中心、注册中心 服务器、系统健康检查、安全检查、分布式配置、分布式配置服务器、熔断器、分布式链路跟踪、分布式日志收集、分布式网关;
注册中心 eureka
为什么要有注册中心?
我们就拿电商举例;在早起开发中,一个大的项目分别由功能模块组成,比如淘宝,你有一个登陆,还有注册,购买,支付等功能,这些一个个小的模块,组成了一个大的项目,但是其中的一个小模块出现问题,那么整个项目都将被迫关闭服务器进行维护,为了解决这个问题,这些年越来越多的企业开始使用微服务分布式这个框架来解决这个问题,比如当你的注册模块出问题了,并不影响其他模块,你注册出问题,我登录照样正常,只不过注册我线关闭服务罢了;
这一个个小的模块就被称之为“服务”,但是服务与服务之前是需要相互调用,这个时候就需要注册中心作为中介一样,把这些一个个服务注册进来,进来后我帮你们进行连接,当服务器a想调用服务b的时候,服务器a仅需要在注册中心找服务b即可,而不是直接向服务b索要;
所以,我们在开发过程中,需要将我们写好的每一个功能模块(服务)都朝注册中心注册一下,但是注册中心可不管你们谁调用谁,它只管注册与发现,当然在你注册的时候,需要把服务的名称告诉注册中心,不然那么多服务,谁知道这些服务都是干嘛的;
所有服务都向注册中心注册,事实上注册中心已经搭好了一个Map,key就是你的服务名称(项目名),value就是服务的端口号,因为我们在注册的时候,不但要告诉项目名称,当然也需要告诉我们的ip地址;
创建第一个注册中心与微服务准备工作
首先,我们需要新建一个项目,这里我选用了Gradle,因为比较方便好用,个人感觉Maven太过繁琐笨重;


创建好项目后,接下来,我们需要在build.gradle文件中进行一些配置,这些配置我就不一一讲解了,所以需要有boot的基础;
apply plugin: 'java'
apply plugin: 'spring-boot' sourceCompatibility = 1.8 dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
//在编译构建时的配置
buildscript {
ext {
//定义一个变量,统一规定springboot的版本
springBootVersion = '1.5.10.RELEASE'
}
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url "http://repo.spring.io/plugins-snapshot" }
} dependencies {//用来打包
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
//统一所有项目的配置
allprojects {
group 'com.lh'
version '1.0-SNAPSHOT' ext {
springCloudVersion = 'Edgware.SR2'
} repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url "http://repo.spring.io/plugins-snapshot" }
}
//指定编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
} //统一子项目的配置,仅对子项目生效
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot' dependencies {
compile('org.springframework.boot:spring-boot-starter-web') {
//移出tomcat
exclude module: "spring-boot-starter-tomcat"
}
//undertow(性能比tomcat好,吞吐量大)
compile 'org.springframework.boot:spring-boot-starter-undertow'
//健康检查
compile 'org.springframework.boot:spring-boot-starter-actuator'
//集成Redis
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis'
testCompile(
group: 'junit', name: 'junit', version: '4.12'
)
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
} }
配置完成后点击导入,请耐心等待他下载完环境以及jar包:

创建第一个注册中心与微服务
在我们刚刚创建好的项目上右键,选择New-》Module;
到这里有有些疑惑了,为什么要在项目中,再创建一个项目呢?
因为,我们现在的这些操作,实际上就是微服务,我们把一个大的项目进行了拆分,分成了一个个小的项目(也被称之为,“子项目”),可以把他们理解HTML中的DIV,我们现在建的是一个最外层的DIV,我们准备建的是大DIV里面中的小DIV;
在选择Module后勾选Gradle跟Java点击NEXT,然后给这个模块起个名字,也就是给这个服务起个名字;

建立完模块后,我们接下来就把这个模块当做一个注册中心,没错,往后的项目,我们都需要朝着它进行注册;
在这个Module项目结构下(我这个模块的名称是:reigster-center)点击build.gradle这个配置文件中,进行一个简单的配置;
刚才我说了,我们需要把这个模块做成一个注册中心,所以我们需要在build.gradle引入一个jar包来配置注册中心所具备的条件;

build.gradle里的配置:
dependencies {
//eureak:注册中心,服务器
compile 'org.springframework.cloud:spring-cloud-starter-eureka-server'
}

导入成功后,接下来,我们需要在项目的src-main-resources目录下创建一个yml配置文件:

配置文件内容:
server:
port:
spring:
application:
name: reigster-center
eureka:
client:
register-with-eureka: false #启动时不注册,来表示自己是一个注册中心
fetch-registry: false #不在注册中心拉取数据
service-url:
defaultZone: http://localhost:8081/eureka/,http://localhost:8080/eureka/,http://localhost:8082/eureka/
server:
enable-self-preservation: true #是否开启eureka服务器的自我保护
首先,8080就是我们注册中心的端口号,我们访问的时候,也需要在地址栏输入8080;
name 代表你的服务名称,这里写自己的项目名称即可;
register-with-eureka: true #启动时不注册,来表示自己是一个注册中心
fetch-registry: true #不在注册中心拉取数据
如果是其他项目,我们需要向注册中心请求资源,获取数据,但是注册中心不需要,因为我自己就是一个注册中心,我何必具备这些功能,所以这里就把一些功能关闭
可以看到,下面编写了许多的端口号,这里面的每一个地址都是一个注册中心,在启动的时候进行相互注册,如果其中一个注册中心出现故障,那么另外两个顶替,从而也实现了负载均衡与集群;
自我保护我会在后面的文章中会重点介绍;
配置启动注册中心
当以上配置均完成后,我们开始编写启动类,先看下我点项目结构:

在java目录下创建一个包,代表这个包只存放启动类;
在包中编写启动类(RegisterCenterProvider)用于启动注册中心:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer
@SpringBootApplication
public class RegisterCenterProvider {
public static void main(String [] args){
SpringApplication.run(RegisterCenterProvider.class,args);
}
}
启动注册中心
准备工作完成后,我们只需运行启动类即可启动注册中心;
无需编写其他代码;
准备启动时,先看一下自己的注册中心端口号,我的是8080,这里可以随便写,但是要注意,不要写重复了;
下面,我们直接在地址栏输入请求地址即可;


划红线的那一栏就表明你所注册进来的服务;
今日感悟:
一件东西越难获得,往往它的价值就越高;
做人也是如此,如果你总是轻易的答应别人;
甚至讨好别人,那,你的自身价值也就越低廉
SpringCloud-服务注册与发现(注册中心)的更多相关文章
- Spring Cloud Consul使用——服务注册与发现(注册中心)
整理自该文章 一.Consul 服务端接下来我们开发 Consul 的服务端,创建一个 spring-cloud-consul-producer 项目 1.添加依赖包 <dependencies ...
- Spring Cloud Eureka 实现服务注册与发现
微服务 是一种架构模式,跟具体的语言实现无关,微服务架构将业务逻辑分散到了各个服务当中,服务间通过网络层进行通信共同协作:这样一个应用就可以划分为多个服务单独来维护发布.构建一个可靠微服务系统是需要具 ...
- springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版
新年第一篇博文,接着和大家分享springcloud相关内容:本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的 ...
- SpringCloud服务注册与发现中心-Eureka
1.服务注册与发现的好处: 假设没有这个东西,那么如果存在a,b,c三个同样的服务: 而现在有一个u服务需要用到a或b或c提供的接口,那么u里面肯定是需要配置这三个服务的地址,然后调用的时候还有问题就 ...
- springcloud之服务注册与发现(Eureka)
springcloud服务注册与发现 使用Eureka实现服务治理 作用:实现服务治理(服务注册与发现) 简介: Spring Cloud Eureka是Spring Cloud Netflix项目下 ...
- springcloud之服务注册与发现
本次分享的是关于springcloud服务注册与发现的内容,将通过分别搭建服务中心,服务注册,服务发现来说明:现在北京这边很多创业公司都开始往springcloud靠了,可能是由于文档和组件比较丰富的 ...
- SpringCloud(3)---Eureka服务注册与发现
Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...
- SpringCloud(2) 服务注册和发现Eureka Server
一.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于REST的服务,用于定位服务,以实现云端中间层服务发现 ...
- SpringCloud系列——Eureka 服务注册与发现
前言 Eureka是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移.本文记录一个简单的服务注册与发现实例. GitHub地址:https:/ ...
- SpringCloud学习笔记:服务注册与发现Eureka(2)
1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...
随机推荐
- 重温《STL源码剖析》笔记 第一章
源码之前,了无秘密. --侯杰 经典的书,确实每看一遍都能重新收获一遍: 第一章:STL简介 STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库. STL的价值:1.带给我们一套 ...
- 重温《STL源码剖析》笔记 第二章
源码之前,了无秘密. --侯杰 第二章:空间配置器 allocator SGI特殊的空间配置器,std::alloc SGI是以malloc()和free()完成内存的配置与释放. SGI设计了双层级 ...
- MIT算法导论课程
http://open.163.com/movie/2010/12/G/F/M6UTT5U0I_M6V2T1JGF.html
- 智能指针之 shared_ptr
std::shared_ptr 是通过指针保持对象共享所有权的智能指针.多个 shared_ptr 对象可占有同一对象大概实现了一下,主要实现原理为,共享指针内部持有堆资源 的指针以及引用计数的指针 ...
- CentOS 7.4 MySQL 5.7.20主从环境搭建(M-S)
MySQL主从原理: 一,master记录二进制日志,在每个事务更新数据完成之前,master在二进制日志中记录这些改变.mysql将事务写入二进制日志,即使事务中的语句都是交叉执行的.在事件写入二进 ...
- cropper(裁剪图片)插件使用(案例)
公司发布微信H5前端阵子刚刚弄好的H5端的图片上传插件,现在有需要裁剪图片.前端找了一个插件---cropper 本人对这插件不怎么熟悉,这个案例最好用在一个页面只有一个上传图片的功能上而且只适合单个 ...
- git的个人配置
一..gitconfig存储在当前用户所在文件目录下,如图1.1. 图1.1 二.git拉取代码的服务器.用户名.密码,存储的所在位置,如图1.2. 图1.2 三.是否保存密码,由.gitconfig ...
- python函数调用的四种方式 --基础重点
第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x, y): print "--normal_invoke ...
- Spring Webflux: Kotlin DSL [片断]
原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets 作者:Biju Kunjummen 译者:Jackie Tang ...
- java基础之接口(抽象类与接口的区别)
概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...