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-服务注册与发现(注册中心)的更多相关文章

  1. Spring Cloud Consul使用——服务注册与发现(注册中心)

    整理自该文章 一.Consul 服务端接下来我们开发 Consul 的服务端,创建一个 spring-cloud-consul-producer 项目 1.添加依赖包 <dependencies ...

  2. Spring Cloud Eureka 实现服务注册与发现

    微服务 是一种架构模式,跟具体的语言实现无关,微服务架构将业务逻辑分散到了各个服务当中,服务间通过网络层进行通信共同协作:这样一个应用就可以划分为多个服务单独来维护发布.构建一个可靠微服务系统是需要具 ...

  3. springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版

    新年第一篇博文,接着和大家分享springcloud相关内容:本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的 ...

  4. SpringCloud服务注册与发现中心-Eureka

    1.服务注册与发现的好处: 假设没有这个东西,那么如果存在a,b,c三个同样的服务: 而现在有一个u服务需要用到a或b或c提供的接口,那么u里面肯定是需要配置这三个服务的地址,然后调用的时候还有问题就 ...

  5. springcloud之服务注册与发现(Eureka)

    springcloud服务注册与发现 使用Eureka实现服务治理 作用:实现服务治理(服务注册与发现) 简介: Spring Cloud Eureka是Spring Cloud Netflix项目下 ...

  6. springcloud之服务注册与发现

    本次分享的是关于springcloud服务注册与发现的内容,将通过分别搭建服务中心,服务注册,服务发现来说明:现在北京这边很多创业公司都开始往springcloud靠了,可能是由于文档和组件比较丰富的 ...

  7. SpringCloud(3)---Eureka服务注册与发现

    Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...

  8. SpringCloud(2) 服务注册和发现Eureka Server

    一.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于REST的服务,用于定位服务,以实现云端中间层服务发现 ...

  9. SpringCloud系列——Eureka 服务注册与发现

    前言 Eureka是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移.本文记录一个简单的服务注册与发现实例. GitHub地址:https:/ ...

  10. SpringCloud学习笔记:服务注册与发现Eureka(2)

    1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...

随机推荐

  1. Cython入门Demo(Linux)

    众所周知,Python语言是非常简单易用的,但是python程序在运行速度上还是有一些缺陷.于是,Cython就应运而生了,Cython作为Python的C扩展,保留了Python的语法特点,集成C语 ...

  2. python_重写数组

    class MyArray: '''All the elements in this array must be numbers''' def __IsNumber(self,n): if not i ...

  3. element-ui bug及解决方案

    1.element-ui 使用MessageBox后弹窗显示异常 解决方案:去掉Vue.use(MessageBox); 2.element-ui 分页切换后若改变总数会导致请求两次 解决方案:< ...

  4. 基于Mybatis的Dao层的开发

    基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...

  5. Linux 普通用户之间免密登陆

    目的: 同台机器之间实现普通用户之间的免密登陆: NN01 的user1 免密登陆 user2 不同机器之间实现普通用户之间的免密登陆 :NN01 的user1 免密登陆 NN01 的user1 一. ...

  6. Python之深浅拷贝

    拷贝就是拷贝,何来深浅之说? Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果 其实这个是由于共享内存导致的结果 浅拷贝 l1 = [1,2,3 ...

  7. Springboot2.0(Spring5.0)中个性化配置项目上的细节差异

    在一般的项目中,如果Spring Boot提供的Sping MVC不符合要求,则可以通过一个配置类(@Configuration)加上@EnableWebMvc注解来实现完全自己控制的MVC配置.但此 ...

  8. 你不知道的JavaScript--Item29 DOM基础详解

    看完JavaScript高级程序设计,整理了一下里面的DOM这一块的知识点,比较多,比较碎!DOM在整个页面的地位如图: DOM(文档对象模型)是针对HTML 和XML 文档的一个API(应用程序编程 ...

  9. JAVA经典算法40题(原题+分析)之原题

    JAVA经典算法40题(上) [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...

  10. 使用Eclipse远程调试

    在一般的开发中,有事因为项目需要,测试环境是在Linux下,这是如果出现异常或者bug,调试起来都是很费劲的,如果你还在为这个头疼,那就好好看接下来的总结 1,启动改程序时,不论是脚本启动,还是tom ...