微服务架构:Spring-Cloud

什么是微服务?

微服务就是把原本臃肿的一个项目的所有模块拆分开来并做到互相没有关联,甚至可以不使用同一个数据库。 比

如:项目里面有User模块和Power模块,但是User模块和Power模块并没有直接关系,仅仅只是一些数据需要交

互,那么就可以吧这2个模块单独分开来,当user需要调用power的时候,power是一个服务方,但是power需要

调用user的时候,user又是服务方了, 所以,他们并不在乎谁是服务方谁是调用方,他们都是2个独立的服务,这

时候,微服务的概念就出来了。

经典问题:微服务和分布式的区别

谈到区别,我们先简单说一下分布式是什么,所谓分布式,就是将偌大的系统划分为多个模块(这一点和微服务很

像)部署到不同机器上(因为一台机器可能承受不了这么大的压力或者说一台非常好的服务器的成本可能够好几台

普通的了),各个模块通过接口进行数据交互,其实 分布式也是一种微服务。 因为都是吧模块拆分开来变为独立

的单元,提供接口来调用,那么 他们本质的区别在哪呢? 他们的区别主要体现在“目标”上, 何为目标,就是你这

样架构项目要做到的事情。 分布式的目标是什么? 我们刚刚也看见了, 就是一台机器承受不了的,或者是成本问

题 , 不得不使用多台机器来完成服务的部署, 而微服务的目标 只是让各个模块拆分开来,不会被互相影响,比如

模块的升级亦或是出现BUG等等...

讲了这么多,可以用一句话来理解:分布式也是微服务的一种,而微服务他可以是在一台机器上。

微服务与Spring-Cloud的关系(区别)

微服务只是一种项目的架构方式,或者说是一种概念,就如同我们的MVC架构一样, 那么Spring-Cloud便是对这

种技术的实现。

微服务一定要使用Spring-Cloud吗?

我们刚刚说过,微服务只是一种项目的架构方式,如果你足够了解微服务是什么概念你就会知道,其实微服务就算

不借助任何技术也能实现,只是有很多问题需要我们解决罢了例如:负载均衡,服务的注册与发现,服务调用,路

由。。。。等等等等一系列问题,所以,Spring-Cloud 就出来了,Spring-Cloud将处理这些问题的的技术全部打包

好了,就类似那种开袋即食的感觉。。

Spring-Cloud项目的搭建

因为spring-cloud是基于spring-boot项目来的,所以我们项目得是一个spring-boot项目,至于spring-boot项目,

这节我们先不讨论,这里要注意的一个点是spring-cloud的版本与spring-boot的版本要对应下图:

在我这里我的版本是这样的

spring-boot:

<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>.RELEASE</version>

  </parent>

spring-cloud:

<dependencyManagement>

    <dependencies>

      <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-dependencies</artifactId>

        <version>Finchley.SR2</version>

        <type>pom</type>

        <scope>import</scope>

      </dependency>

    </dependencies>

  </dependencyManagement>

当你项目里面有这些依赖之后,你的spring cloud项目已经搭建好了(初次下载spring-cloud可能需要一点时间)

Spring-Cloud组件:

eureka:

eureka是什么?

eureka是Netflix的子模块之一,也是一个核心的模块,eureka里有2个组件,一个是EurekaServer(一个独立的项

目) 这个是用于定位服务以实现中间层服务器的负载平衡和故障转移,另一个便是EurekaClient(我们的微服务)

它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务。

与spring-cloud的关系:

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(可以对比Zookeeper)。

Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可

以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以

通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

角色关系图:

如何使用?

在spring-cloud项目里面加入依赖:

eureka客户端:

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

    </dependency>

eureka服务端:

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

    </dependency>

eureka服务端项目里面加入以下配置:

s

erver:

port: 

eureka:

server:

 enable-self-preservation: false  #关闭自我保护机制

 eviction-interval-timer- #设置清理间隔(单位:毫秒 默认是60*)

instance:

 hostname: localhost

client:

 registerWithEureka: false #不把自己作为一个客户端注册到自己身上
fetchRegistry: false  #不需要从服务端获取注册信息(因为在这里自己就是服务端,而且已经禁用自己注

册了)

 serviceUrl:

  defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

当然,不是全部必要的,这里只是把我这里的配置copy过来了
然后在spring-boot启动项目上 加入注解:@EnableEurekaServer
就可以启动项目了

@EnableEurekaServer

@SpringBootApplication

public class AppEureka {

  public static void main(String[] args) {

    SpringApplication.run(AppEureka.class);

 }

}

如果看见这个图片,那么说明你就搭建好了:

这个警告只是说你把他的自我保护机制关闭了

eureka客户端配置:

server:
port:
eureka:
然后在客户端的spring-boot启动项目上 加入注解:@EnableEurekaClient 就可以启动项目了 这里就不截图了我们
直接来看效果图:
这里我们能看见 名字叫server-power的(图中将其大写了) id为 power-1的服务 注册到我们的Eureka上面来了
至此,一个简单的eureka已经搭建好了。
当然 这篇咱们先讲应用, 源码文章以后再更新, 或者大家腾讯课堂搜鲁班学院 我会在里面免费的公开课上讲到
Spring Cloud 以及Eureka的源码
client:
 serviceUrl:
   defaultZone: http://localhost:3000/eureka/  #eureka服务端提供的注册地址 参考服务端配
置的这个路径
instance:
 instance-id: power- #此实例注册到eureka服务端的唯一的实例ID
 prefer-ip-address: true #是否显示IP地址
 leaseRenewalIntervalInSeconds:  #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍
然活着,默认为30 秒 (与下面配置的单位都是秒)
 leaseExpirationDurationInSeconds:  #Eureka服务器在接收到实例的最后一次发出的心跳后,需要
等待多久才可以将此实例删除,默认为90秒
spring:
application:
 name: server-power #此实例注册到eureka服务端的name

然后在客户端的spring-boot启动项目上 加入注解:@EnableEurekaClient 就可以启动项目了 这里就不截图了

我们直接来看效果图:

这里我们能看见 名字叫server-power的(图中将其大写了)
id为 power-1的服务 注册到我们的Eureka上面来了

至此,一个简单的eureka已经搭建好了。

当然 这篇咱们先讲应用, 源码文章以后再更新, 如果大家需要微服务架构方面以及更多资料,大家可以添加我的Java高级交流群:901439810,欢迎你的交流

当下最流行的微服务与spring cloud,你搞清楚了吗?的更多相关文章

  1. 微服务与Spring Cloud概述

    微服务与Spring Cloud随着互联网的快速发展, 云计算近十年也得到蓬勃发展, 企业的IT环境和IT架构也逐渐在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构. 微服务是一种架构风 ...

  2. [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST,  ...

  3. 2.微服务开发框架——Spring Cloud

                     微服务开发框架—Spring Cloud 2.1. Spring Cloud简介及其特点 简介: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见 ...

  4. 消息驱动微服务:Spring Cloud Stream

    最近在学习Spring Cloud的知识,现将消息驱动微服务:Spring Cloud Stream 的相关知识笔记整理如下.[采用 oneNote格式排版]

  5. 什么是微服务架构 Spring Cloud?

    1 为什么微服务架构需要Spring Cloud 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB.KV,去掉重量级ESB) ...

  6. 微服务网关 Spring Cloud Gateway

    1.  为什么是Spring Cloud Gateway 一句话,Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是 ...

  7. 微服务与Spring Cloud资料

    Microservices Using Spring Boot and Spring Cloud 微服务注册中心 Eureka 架构深入解读 50+ 顶级开源 Kubernetes 工具列表 Apol ...

  8. 微服务之Spring cloud

    微服务 Spring cloud Spring Cloud provides tools for developers to quickly build some of the common patt ...

  9. 第十章 消息驱动的微服务: Spring Cloud Stream

    Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架. 它可以基于Spring Boot 来创建独立的. 可用于生产的 Spring 应用程序. 它通过使用 Sprin ...

随机推荐

  1. docker安装gitlab-runner

    docker安装gitlab-runner docker pull gitlab/gitlab-runner:latest安装gitlab-runner 打开自己搭建的GitLab网站,点击顶栏的Sn ...

  2. 【Linux】一步一步学Linux——VMware Workstation 15 Pro安装图解教程(06)

    目录 00. 目录 01. VMware Workstation Pro15下载 02. VMware Workstation Pro15安装 03. VMware Workstation Pro 1 ...

  3. C# 连接数据库等

    SqlConnection连接池:可以通过连接字符串配置连接池.对象池技术:HttpApplication :Asp.Net生产者 消费者. 线程.应用程序跟数据连接非常耗时,而且连接使用非常频繁,使 ...

  4. shell 循环打印某一天后的n天的日期

    #!/bin/bash start_date="2017-10-26" for i in `seq 0 30` do num=$((${i}+1)) datatime=`date ...

  5. HDU 2089:不要62(数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Problem Description   杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer) ...

  6. 【原创】面试官:讲讲mysql表设计要注意啥

    引言 近期由于复习了一下mysql的内容,有些心得.随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且很多问题,都是面试中实打实会问到的! 比如 OK,具体 ...

  7. XAML与C#与WPF三者到底有什么关系?

    XAML是.NET体系开发程序或者网页时前台编程的一种布局方式或者说开发语言,可以比较自由的用标签的方式进行布局,借鉴了HTML和XML等语言的风格,并且加入了一些动画等的实现.C#则是后台逻辑开发用 ...

  8. 2.秋招复习简单整理之String、StringBuffer、StringBuilder的区别和联系

    String特点: 1.String是不可变对象,一旦赋值创建就不变,这意味着对String的一切修改将产生一个新的字符串,比如String的subString,replace.toUpperCase ...

  9. 新手上路——it人如何保持竞争力

    新手上路——如何保持竞争力 JINGZHENGLI 套用葛大爷的一句名言:21世纪什么最贵,人才.哪你是人才还是人材?还是人财或人裁?相信大家都不是最后一种.何如保持住这个光环呢?就需要我们保持我们独 ...

  10. 双剑合璧——掌握 cURL 和 Dig 走天涯

    如今随着大量的应用转移到网络,作为开发者,会经常做一些通讯测试,例如从网站获取信息.模拟用户向网站提交或者上传数据,查看应用通讯情况等等,现在变成了非常重要的任务. 一起来认识 cURL cURL 是 ...