一、Spring Cloud 简介

Spring Cloud 是一个基于Spring Boot 实现的微服务架构开发工具。是一个涉及到服务治理、分布式配置管理、负载均衡、服务容错、API网关、消息总线、服务跟踪等等为一体的微服务架构体系。我们常常听说的Spring Cloud全家桶,就是这个意思,他是一个整体的解决方案,最主要的是,用起特别简单。它主要包含如下组件:

Spring Cloud Netfilx: 核心组件,对多个Netflix OSS 开源组件进行整合

| - Eureka:服务治理,包含服务注册中心、服务注册于服务发现

|-  Hystrix: 容错管理

|- Ribbon: 负载均衡

|- Feign : 声明式服务调用组件

|- Zuul:    微服务网关

Spring Cloud Bus: 消息总线,用于传播集群中的状态变化或者事件

Spring Cloud Consul: 服务发现与配置管理工具

Spring Cluod Zookeeper: 基于Zookeeper的服务发现与配置管理组件

Spring Cloud Stream : 通过redis、kafka实现的消费服务,可以通过简单的声明式模型来发送和接收消息

。。。。。。

很多很多,这里就不一一介绍了。

要特别注意:Spring Cloud 并不是微服务,而是Spring 帮我们封装的微服务整体解决方案,就像以前的Spring,SpringBoot一样,只是工具。还有别的办法可以实现微服务。只不过SpringCloud给我们提供的这个方案简单、好用。

二、 一切从服务的治理说起

我们前面的文章已经说了,所谓的微服务,就是把传统单体应用架构以及简单的集群根据实际业务改为一个一个完整的小服务,以便于独立开发、独立维护、独立部署、独立扩展,各个服务之间通过RestFul请求相互调用!

我们的服务刚开始的时候,有可能不会很多,我们可以通过一些静态配置来完成服务的调用,比如配置反向代理,负载均衡。但是,随着业务发展,系统功能越来越复杂,相应的微服务也在不断的增加,我们的配置文件会变得越来越难以维护,而且,随着业务的增长,我们的集群规模、服务的位置、服务的命名都有可能发生变化。如果还是通过手工来配置,极容易出错,搞不好上西线一个新功能,一不小心,在nginx中多写了空格,多加了个子目,nginx挂了,完了,所有服务都掉不通了...诸如此类。(为了不出问题,我每次更改的时候做了备份,检查了又检查,不胜其烦)

因为这个原因,产生了一些服务治理的框架,比如阿里系的Dubbo,当当网的DubboX,还有我们今天要讲的Eureka等等。

  1> Eureka 跑起来

在简单的介绍了spring-cloud 以及 我们需要服务治理之后,我们先把Eureka跑起来,然后,我们再说服务治理咱们治理了些啥。

第一步:起一个Eureka服务端(服务注册中心)

作用: 既然是服务治理,我得有个治理中心,这个就是Eureka服务端

起一个Java的Maven工程,引入依赖:

<properties>
<!--配置默认编码为UTF-8-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--定义java版本-->
<java.version>1.8</java.version>
<!--集中定义依赖版本-->
<spring-cloud-version>Dalston.SR5</spring-cloud-version>
</properties> <dependencies>
<!--引入eureka-server依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring-Cloud组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <!--统一构建文件-->
<build>
<finalName>joy-framework</finalName>
<plugins>
<!-- Compile Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>

起一个SpringBoot主类,在其上加上@EnableEurekaServer注解,标识为一个服务注册中心以提供给其他应用进行对话。

/**
* 服务注册中心
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties配置文件中增加如下信息:

# 设置服务名
spring.application.name=demo-eureka-server
#设置服务端口
server.port=9001
# eureka配置
eureka.instance.hostname=localhost
#设置不应许将自己注册为eureka客户端
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

PS: 这里,特别讲一下

eureka.client.register-with-eureka=false ---- 这一项是设置该服务是否想注册中心注册自己,设置为false表示不注册自己!
eureka.client.register-with-eureka=false ---- 由于注册中心的职责就是维护服务实例,它并不需要去检索服务(让别人主动注册过来就好了),所以,也设置为false.
这两个配置。

这个时候,我们启动工程,然后访问http://localhost:9001/就可以看到下面的页面:

至此,我们的服务注册中心已经跑起来了,是不是很简单!!!这个时候,控制面板中instances currently registered(目前已注册实例)列表为空,表示没有任何实例。

既然有了服务注册中心,那么,我们得有服务给他管理。接下来,我们就来创建一个服务:demo-eureka-first-client.

首先,还是起一个SpringBoot 工程,在pom.xml中加入如下信息:

<dependencies>
<!--客户端,当然要引入eureka依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> <!--!我们用SpringMvc的restful对外提供服务,所以要引入相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> <!--!省略版本和buil相关内容-->

然后,我们写一个web接口/hello,用来模拟提供服务:

/**
* 验证web服务
*/
@RestController
public class HelloController {
@Autowired
private DiscoveryClient discoveryClient; @GetMapping("/hello")
public @ResponseBody
String hello() {
System.out.println("调用hello" + discoveryClient.getServices());
return "Hello ,First Eureka Client";
}
}

然后,在应用主类上加上@EnableDiscoveryClient注解,让其能够被当做eureka-client被注册中心发现。

@EnableDiscoveryClient //注解启动一个服务注册中心提供给其他应用进行对话
@SpringBootApplication
public class EurekaClientFirstApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientFirstApplication.class, args);
}
}

当然,仅仅能够被发现是远远不够的,接下来,我们还需要再配置文件中配置一下相关信息(主要是告诉应用,我是谁,我在哪里,我要去哪里注册):

#通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问
spring.application.name=demo-eureka-client-first
#为了在本机上测试区分服务提供方和服务注册中心,使用server.port属性设置不同的端口。
server.port=9011
#关键:定义eureka-server的地址
eureka.client.service-url.defaultZone=http://localhost:9001/eureka/

最后,我们启动SpringBoot应用。

我们会在控制台看到如下打印信息:

这个就表示已经发现了自己,表示注册成功.

而此时,你再看注册中心的控制台,可以发现如下信息:

我们再回到控制台页面上去,再注册列表中会看到如下内容:

你点击进去,就会默认调用/info接口,这个时候你就会得到如下信息:

可以看到,我们其实已经进入到了9011这个端口上的服务了,只是默认掉的info接口,这个接口我们没有提供,所以9011上的这个服务报错了。当我们改为hello的时候,就会出现如下信息:

ok,至此,我们一个服务注册中心和一个服务已经开发完成。当然,我们也可以仿照第一个服务,再起一个demo-eureka-client-second服务。笔者在这里就不赘述了,都一样,改个名和端口而已。如果你启动这个服务,那么,就可以在注册中心看到如下内容:

看到了吧,第二个服务也注册进来了。

这样,我们就完成了一个简单的服务治理了。是不是很简单,就是引入依赖,加上注解而已。我们知道,SpringBoot让开发变得简单,而SpringCloud那就是让我们开发微服务变得简单!

这里,我们只起了一个很简单得注册中心和两个简单得不能再简单的服务。

当然,SpringCloud的内容远不止这些,这只是个开始,从这里,咱们就一起开启我们的Spring-Cloud 微服务全家桶的学习之旅吧。

PS: 附上该Demo的git源码:https://gitee.com/top-djlee/demo-spring-cloud.git

一、 Spring Cloud Eureka ,咱们先跑起来的更多相关文章

  1. Spring Cloud Eureka集群部署到Linux环境

    还是三板斧:先改配置文件,支持集群,然后出包,上传到linux环境(3个节点),最后启动jar包跑起来. 1.在原eureka服务端代码(参见Greenwich.SR2版本的Spring Cloud ...

  2. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  3. Spring Cloud Eureka Server集群Demo级搭建

    将上篇随笔Spring Cloud Eureka服务Demo级搭建进行改造,改造成一个在本机的伪集群 1.修改hosts文件(windows10 hosts文件位置:C:\Windows\System ...

  4. spring cloud eureka高可用

    记录下自己踩的坑 spring cloud eureka的高可用网上的教程大致分为两种,一种是两两互相注册,一种是三个互相注册. 1.两两互相注册 普通服务的注册写法都是http://peer1/eu ...

  5. 笔记:Spring Cloud Eureka 服务治理

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

  6. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...

  7. Spring Cloud Eureka 常用配置详解,建议收藏!

    前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...

  8. Spring Cloud Eureka 你还在让它裸奔吗??

    前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版 ...

  9. Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!

    Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...

  10. Spring Cloud微服务笔记(三)服务治理:Spring Cloud Eureka快速入门

    服务治理:Spring Cloud Eureka 一.服务治理 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现. 1.服务注册: 在服务治理框架中,通常会构 ...

随机推荐

  1. pig flatten

    今天通过不断的尝试,终于知道这个flatten的用法了.其实吧,有时候关键是要test,才能充分理解解说.不过,同事给说的有点问题,误导了我.整的我一直没明白怎么回事. 这是官方的解释: The FL ...

  2. 15、Linux 文件属性和测试( chgrp,chown,chmod和-e -f -d -s

    一.更改文件属性 1.chgrp:更改文件属组 语法: chgrp [-R] 属组名文件名 参数选项 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件 ...

  3. keras安装windows版

    按照官网成功了.下面没有成功,貌似是 Anacode的问题 http://blog.csdn.net/hweiyi/article/details/70018317 http://blog.csdn. ...

  4. 让开发更简单 —— Coding Enterprise 发布

    今天,我们很高兴地宣布 Coding Enterprise 发布了 —— Coding Enterprise 是 CODING 专为企业打造的软件开发协作平台,提供了针对中小型企业的公有云版本和针对大 ...

  5. 13.Weblogic任意文件上传漏洞(CVE-2018-2894)复现

    Weblogic任意文件上传漏洞(CVE-2018-2894)复现 漏洞背景 WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.两个页面分别为/ws_utc/be ...

  6. (PHP)redis Hash(哈希)操作

    /** * * Hash操作 * 哈希操作 * 可理解为数据库操作 * */ //为user表中的字段赋值.成功返回1,失败返回0.若user表不存在会先创建表再赋值,若字段已存在会覆盖旧值. $re ...

  7. 基于 bootstrap 字体图标,用纯CSS实现星级评分功能

    需要用到的图标 实现原理 关键属性是 text-overflow: clip;,表示直接截断文本.我们经常用这个属性的另一个值 text-overflow: ellipsis; 来做省略表示. 先平铺 ...

  8. 数据绑定—Source(绑定到静态类的静态属性)

    <UserControl x:Class="绑定.绑定Source" xmlns="http://schemas.microsoft.com/winfx/2006/ ...

  9. 今天来记录一下关于ajax跨域的一些问题。以备不时之需。

    今天来记录一下关于ajax跨域的一些问题.以备不时之需. 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面 ...

  10. 1、kubernetes系统基础190622

    1.容器编排工具 docker编排工具三剑客:docker compose, docker swarm, docker machine IDC的操作系统:mesos 提供容器编排框架:marathon ...