Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud简介

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。

微服务架构

微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务的概念源于2014年3月Martin Fowler所写的章“Microservices”http://martinfowler.com/articles/microservices.html

微服务架构(Microservices Architecture)

微服务架构的核心思想是,一个应用是由多个小的、相互独立的、微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。简单的来说,一个系统的不同模块转变成不同的服务!而且服务可以使用不同的技术加以实现!

微服务设计

那我们在微服务中应该怎样设计呢。以下是微服务的设计指南:

  • 职责单一原则(Single Responsibility Principle):把某一个微服务的功能聚焦在特定业务或者有限的范围内会有助于敏捷开发和服务的发布。

  • 设计阶段就需要把业务范围进行界定。

  • 需要关心微服务的业务范围,而不是服务的数量和规模尽量小。数量和规模需要依照业务功能而定。

  • 于SOA不同,某个微服务的功能、操作和消息协议尽量简单。

  • 项目初期把服务的范围制定相对宽泛,随着深入,进一步重构服务,细分微服务是个很好的做法。

关于微服务架构的取舍

  • 在合适的项目,合适的团队,采用微服务架构收益会大于成本。

  • 微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑战。

  • 需要避免为了“微服务”而“微服务”。

  • 微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

更多关于微服务架构内容-请参考我的另一篇文章:《什什么是微服务架构?》

服务治理

由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix Eureka、Consul、Zookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

Spring Cloud Eureka

Spring Cloud Eureka来实现服务治理。

Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

Eureka Server

提供服务注册和发现

添加依赖

在项目 spring-cloud-eureka-service pom.xml中引入需要的依赖内容:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

开启服务注册

通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话,这个注解需要在springboot工程的启动application类上加

package io.ymq.example.eureka.server;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

添加配置

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

registerWithEureka: false
fetchRegistry: false

完整配置

server:port: 8761eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

访问服务

启动工程后,访问:http://localhost:8761/

可以看到下面的页面,其中还没有发现任何服务。

Service Provider

  • 服务提供方

  • 将自身服务注册到 Eureka 注册中心,从而使服务消费方能够找到

添加依赖

在项目 spring-cloud-eureka-provider pom.xml中引入需要的依赖内容:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

开启服务注册

在应用主类中通过加上 @EnableEurekaClient,但只有Eureka 可用,你也可以使用@EnableDiscoveryClient。需要配置才能找到Eureka注册中心服务器

package io.ymq.example.eureka.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {@RequestMapping("/")public String home() {return "Hello world";}public static void main(String[] args) {SpringApplication.run(EurekaProviderApplication.class, args);}
}

添加配置

需要配置才能找到Eureka服务器。例:

完整配置

eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/spring:application:name: eureka-providerserver:port: 8081

其中defaultZone是一个魔术字符串后备值,为任何不表示首选项的客户端提供服务URL(即它是有用的默认值)。
通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问

访问服务

启动该工程后,再次访问启动工程后:http://localhost:8761/

可以如下图内容,我们定义的服务被成功注册了。

源码下载

GitHub:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-eureka

码云:https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-eureka

Contact

  • 作者:鹏磊
  • 出处:http://www.ymq.io
  • Email:admin@souyunku.com
  • 版权归作者所有,转载请注明出处
  • Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享

Spring Cloud(一)服务的注册与发现(Eureka)相关推荐

  1. SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka

    SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本) 原文首发于:https://www.fangzhipeng.com/springcloud/2018/ ...

  2. 第一篇:服务的注册与发现Eureka(Finchley版本)V2.0_dev

    Eureka 简介: Eureka是Netflix 开源的服务发现组件, Spring Cloud 将其集成在 Spring Cloud Netflix 中,实现服务的注册和发现.Eureka 主要包 ...

  3. 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现

    文章目录 Spring Cloud Alibaba--微服务开发 Spring Cloud Alibaba是什么?  主要功能  组件 为什么不使用Spring Cloud 使用 Nacos Disc ...

  4. 业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xmt1139057136/article/details/81411887 一.spring clo ...

  5. SpringCloud教程-服务的注册与发现Eureka(SpringCloud版本Finchley)

    文章目录 SpringCloud简介 创建注册中心(基于Eureka) 创建maven工程 创建maven子工程 eureka-server服务端pom文件 eureka-server服务端配置文件 ...

  6. 最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    一.spring cloud简介 鉴于<史上最简单的Spring Cloud教程>很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEAS ...

  7. 第二篇:SpringCloud 服务的注册与发现Eureka(Dalston.SR5版本)

    一.创建父工程 1 首先创建一个maven父工程. <?xml version="1.0" encoding="UTF-8"?> <proje ...

  8. 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81040925 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  9. SpringCloud学习教程一( 服务的注册与发现 Eureka)

    本文是根据方志明的springCloud学习教程进行个人细化,记录个人学习的教程可能会做一些小的修改让文章更便于理解, 原著参考案例全部采用Spring Boot 1.5.x ,Spring Clou ...

  10. Spring Cloud之服务治理(注册发现)

    服务治理SpringCloud Eureka 什么是服务治理 在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用.负载均衡.容 ...

最新文章

  1. 使用Quarkus在Openshift上构建微服务的快速指南
  2. 计算机办公应用适合什么工作,有什么软件堪称办公神器,让你每天的工作轻松不累?...
  3. spring boot实战(第二篇)事件监听
  4. ASP实现数据库事务处理的方法
  5. execjs执行js出现window对象未定义时的解决_10个常见的JS语言错误总汇
  6. Python通过amqp消息队列协议中的Qpid实现数据通信
  7. tensorflow tf.train.batch()
  8. 技术实践第四期|解读移动开发者日常-性能监控平台应用
  9. linux下PS1命令提示符设置
  10. 欧拉和格拉斯曼解释平行宇宙
  11. nginx打开Last_modified
  12. 技术揭秘 | 如何设计 RQData 通讯协议
  13. 如何学习微信小程序? 学习微信小程序所需基础
  14. python w3cschool_python|w3cschool菜鸟教程
  15. MATLAB中FFT使用方法
  16. mysql五日均线_终于有人把“5日均线做短线”的精髓讲透了!
  17. 如何释放计算机内存吗,Win7如何释放内存?三招帮你将电脑中的垃圾全部清理掉!...
  18. Apache端口被占用的解决方法
  19. 九、MySQL数据库之HAVING与子查询
  20. Shell 脚本进阶,经典用法及其案例

热门文章

  1. WebGL 3D 工业隧道监控实战
  2. sendmail服务器配置过程中出现的一些错误和解决办法
  3. gitlab安装各种坑
  4. 关于float的说明
  5. CCControlSwitch 、CCControlSlider、CCControlButton
  6. ×××S:Reporting Services 技巧
  7. 多个CALayer的联动
  8. [HTTP协议]入门篇
  9. 监管大屏系统_高速公路监管系统大屏可视化
  10. ZJU-java进阶笔记 第四周(继承与多态)