Spring Cloud基础教程 - 程序猿DD - 第一版

所需积分/C币:13 2019-02-20 18:38:11 20.48MB PDF
34
收藏 收藏
举报

最早最好的Spring Cloud教程,程序猿DD博客整理版,非常适合入门阅读!
服务注册与发现 服务注册与发现 Spring Cloud简介 Spring Cloud是一个基于 Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管 理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态 管理等操作提供了一种简单的开发方式 Spring cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如: Spring cloud Config、 Spring cloud netflix、 Spring Cloud CloudFoundry、 Spring Cloud AWS、 Spring Cloud Security、 Spring Cloud Commons、 Spring cloud Zookeeper、 Spring Cloud C凵等项目。 微服务架构 微服务架构在这几年非常的火热,以至于关于微服务架构梋关的产品社区也变得越来越活跃(比如 nex、 dubbo), Spring Cloud也因 Spring社区的强大知名度和影响力也被广大架构师与开发者备受 关注。 那么什么是“微服务架构呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成 多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如 RESTfuL AP 的方式互相调用。 对于“微服务架构,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅 读始祖 Martin Fowler的《 Microservices》,本文不做更多的介绍和描述。 服务注册与发现 在简单介绍了 Spring cloud和微服务架构之后,下面回归本文的主旨内容,如何使用 Spring Cloud搭建 服务注册与发现模块。 这里我们会用到 Spring Cloud Netfⅸx,该项目是 Spring cloud的子项目之一,主要内容是对Net公司 系列开源产品的包装,它为 Spring boot应用提供了自配置的 NEtflix OSs整合。通过一些简单的注 解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包 括:服务发现( Eureka),断路器( Hystrⅸx),智能路有(zυu,客户端负载均衡( Ribbon)等。 所以,我们这里的核心内容就是服务发现模块: Eureka。下面我们动手来做一些尝试。 创建“服务注册中心 创建一个基础的 Spring boot工程,并在ρom.xm1中引入需要的依赖内容 <parent> <groupIdorg springframework boots/groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1,3.5. RELEASE</version> 服务注册与发现 <relativepath/> <!- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org. springf r amework boot</groupId> cartifactId>spring-boot-starter-test</artifactId> <scope>test</scope> ≤/ dependency> <dependency> <groupId>org. springframework cloud </groupId> cartifactId>spring -cloud-starter-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupIdorg. springf ramework cloud</groupId> sartifactId>spring-cloud-dependenciess/artifactId> <version>Brixton. RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 通过@ Enableeurekaserver注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简 单,只需要在一个普通的 Spring boot,应用中添加这个注解就能开启此功能,比如下面的例子 @EnableEurekaserver @Spring BootApplication public class Application i public static void main(String[ args)i new SpringApplicationBuilder(Application class).web(true). run(args) 在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客 户端注册行为,只需要在 application. properties中问增加如下配置 server port=l111 eureka. client. register-with-eureka=false eureka. client. fetch-registry=false 服务注册与发现 eureka client serviceur l. defaultzone=htTp: //localhost: Siserver. port/eureka/ 为了与后续要进行注册的服务区分,这里将服务注册中心的端口通过 server.port属性设置 为11110 启动工程后,访问:htp:/ localhost:1111 可以看到下面的页面,其中还没有发现任何服务 o spring Eureka HOME LAsT10。0 SINCE STARTU System Status Current time ∠105-3112452+U Data center fals Renews (last min DS Replicas iucu host Instances currently registered with Eureka Applicat on AMS Availability Zones Status Ne i'1sLd lLes =vdildtle 该工程可参见: Chapter9-1-1 eureka- server 创建“服务提供方” 下面我们创建提供服务的客户端,并向服务注册中心注册自己。 假设我们有一个提供计算功能的微服务模块,我们实现一个 RESTfuLAPI,通过传入两个参数a和b,最 后返回a+b的结果。 首先,创建一个基本的 Spring Boot应用,在pom,xm中,加入如下配置 <parent> <groupIdorg springf ramework boot</groupId> sartifactId>spring-boot-starter-parent </artifactId> <version>1,3.5. RElEASE</version> <relativepath/> <!- lookup parent from repository --> arent> <dependencies> <dependency? <groupId>org. springframework boot </groupId> cartifactId>spring-boot-starter-test</artifactId> ≤ scope> test</ scope </dependency> <dependency> <groupId>org. springfr amework cloud</groupId> 服务注册与发现 cartifactId>spring-cloud-starter-eurekac/artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupIdorg springframework cloud</groupId> sartifactId>spring-cloud-dependencies</artifactId> <version>Brixton. RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 其次,实现/add请求处理接口,通过 Discoveryclient对象,在日志中打印出服务实例的相关内 容 GRest Controller public class comput cOntroller I private final Logger logger Logger getLogger(getclass() aAutowired private Discoveryclient client @RequestMapping(value = /add"A, method Reques tMethod GET) public Integer add(@RequestParam Integer a, @RequestParam Integer b)f ServiceInstance instance= client. getLocalServiceInstance o; Integer r= a+ b; logger. info("/addahost: "+ instance, getHost(+", service id: " + instance getserviceId(+", result: "+ r) return r 最后在主类中通过加上¢ EnableDiscoveryclient注解,该注解能激活 Eureka中 的 Discoveryclient实现,才能实现 Controller中对服务信息的输出。 @EnableDiscoveryclient @SpringBootApplication public class ComputeServiceApplication i ublic static void main(string[] args)[ new SpringApplicationBuilder( ComputeServiceApplication. class).web(true).run (args) 服务注册与发现 我们在完成了服务内容的实现之后,再继续对 application. properties做一些配置工作,具体如 springapplication. name=compute-service server port=2222 eurekaclientserviceurl.defaultzone=http://localhost:1111/eureka/ 通过 spring. application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该 名称就可以进行服务的访问 eureka. client. servicer. defaultzone属性对应服务注册中心的配置內容,指定服务注册中心的 位置。 为了在本机上测试区分服务提供方和服务注册中心,使用 server.port属性设置不同的端口。 启动该工程后,再次访问:htp:/ localhost:1111 可以看到,我们定义的服务被注册了。 Ospring Eureka HOME LAST 1000 SINCE STARTUP System Status Environment est current time 2016-05-31T22:18:31+C800 Data center Pome 0001 _ease expiration enab. ed false Renews threshold Renews(last min) DS Replicas ordInes Instances currently registered with Eureka AMIs Availability Zones Status COMPUTE- SERVICE UP(1)-PC701502157056c0 mpulTe-servire7772 该工程可参见: Chapter9-1-1/ compute-service 【转载请注明出处I:http://blog.didispace.com/springcloud1 服务消费者 服务消费者 在上一篇《sρ ring Cσu构建微服务架构(一)服务注册与发现》中,我们已经成功创建了"服务注册 中心,实现并注册了一个“服务提供者: COMPUTE-SERVICE"。那么我们要如何去消费服务提供者的 接口内容呢? Ribbon Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Fegn中也使用Ribbon,后续会介绍Fegn的使 用。 Ribbon可以在通过客户端中配置的 bbon serverlist服务端列表去轮询访问以达到均衡负载的作用 当 Ribbon与 Eureka联合使用时, ribbon serverlist会被 Discovery EnabledNIWSServerList重写,扩展成 从 Eureka注册中心中获取服务端列表。同时它也会用 NIWSDiscovery Ping来取代|Ping,它将职责委托 给 Eureka来确定服务端是否已经启动。 下面我们通过实例看看如何使用 Ribbonη来调用服务,并实现客户端的均衡负载。 准备工作 启动 Chapter9-1-1中的服务注册中心; eureka- server 启动 Chapter-9-1-1中的服务提供方: compute- service 修改 compute- service中的 server-port为2223,再启动一个服务提供方: compute- service 此时访问:htt/ localhost:1111 Instances currently registered with Eureka COMPUTE-SERVICE UP(2)-192.168.21.101: compute-service: 2222, 192.168. 21.101: compute-service: 2223 可以看到 COMPUTE-SERⅥCE服务有两个单元正在运行 192 168.21.101: compute-service: 2222 192.168. 21.101: compute-service: 2223 使用 Ribbon实现客户端负载均衡的消费者 构建一个基本 Spring Boc项目,并在 pom.xm中加入如下内容 ≤ parent> <groupId>org. springframework boot</groupId> cartifactId>spring- -starter-parents/artifactId> <version>1.3. 5. REleaSe</version> <relativePath/><!--lookup parent from repository </parent> 服务消费者 <dependencies> <dependency> <groupId>org. springframework cloud</groupId> sartifactId>spring-cloud-starter-ribbons/artifactId> </dependency> <dependency> <groupIdorg springframework cloud</groupId> sartifactId>spring-cloud-starter-eurekas/artifactId> </dependency> <dependency> groupId amework boots/groupId> sartifactId>spring-boot-starter-web</artifactId> ≤/ dependency> <dependency> <groupId>org. springf r amework boot</groupId> sartifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependenc <groupId>org. springframework cloud</groupId> sartifactId>spring-cloud-dependenciessyartifactId> <versionBrixton. RELEASE</version <type>pom</type> <scope>import</scope c/dependency? </dependencies> </dependencyManagement> 在应用主类中,通过 @EnableDiscoveryclient注解来添加发现服务能力。创建 RestTemplate实例 并通过@ loadBalanced注解开启均衡负载能力。 @SpringBootApplication @EnableDiscoveryclient public class RibbonApplication C @Bean GLoadBalanced RestTemplate restTemplateo i return new RestTemplate(; ublic static void main(String[] args)C SpringApplication. run(RibbonApplication. class, args); 服务消费者 创建 Consumercontroller来消费 COMPUTE- SERVTCE的add服务。通过直接 RestTemplate来调用服 务,计算10+20的值。 @Res cOntroller public class Consumer Controller t GAutowired RestTemplate restTemplate @RequestMapping (value =/add", me thod RequestMethod GET) public String addo f returnresttemplate.getforentity(http://computE-seRviCe/adD?a=10&b=20St ring. class).getBody(i application. properties中配置euek服务注册中心 springapplication. name=ribbon-consumer server port=3333 eurekaclientserviceurl.defaultzone=http://localhost:1111/eureka/ 启动该应用,并访问两次:http://localhos:3333add 然后,打开 compute-service的两个服务提供方,分别输出了类似下面的日志内容 ·端口为222服务提供端的日志: 2016-06-02 11: 16: 26.787 INFO 90014---l0-2222-exec-10 com didispace web Compute Controller /add, host: 192. 168 21.101, service_id: compute-service, result: 30 ·端口为223服务提供端的日志: 2016-06-02 11: 19: 41. 241 INFO 90122---[nio-2223-exec-1 com didispace web Compute Controller /add, host: 192. 168. 21. 101, service_ id: compute-service, result: 30 可以看到,之前启动的两^ compute- service服务端分别被调用了一次。到这里,我们已经通过Rbon 在客户端已经实现了对服务调用的均衡负载。 整示例可参考: Chapter9-1-2 eureka- ribbon

...展开详情
试读 82P Spring Cloud基础教程 - 程序猿DD - 第一版
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚积分or赚钱
最新推荐
Spring Cloud基础教程 - 程序猿DD - 第一版 13积分/C币 立即下载
1/82
Spring Cloud基础教程 - 程序猿DD - 第一版第1页
Spring Cloud基础教程 - 程序猿DD - 第一版第2页
Spring Cloud基础教程 - 程序猿DD - 第一版第3页
Spring Cloud基础教程 - 程序猿DD - 第一版第4页
Spring Cloud基础教程 - 程序猿DD - 第一版第5页
Spring Cloud基础教程 - 程序猿DD - 第一版第6页
Spring Cloud基础教程 - 程序猿DD - 第一版第7页
Spring Cloud基础教程 - 程序猿DD - 第一版第8页
Spring Cloud基础教程 - 程序猿DD - 第一版第9页
Spring Cloud基础教程 - 程序猿DD - 第一版第10页
Spring Cloud基础教程 - 程序猿DD - 第一版第11页
Spring Cloud基础教程 - 程序猿DD - 第一版第12页
Spring Cloud基础教程 - 程序猿DD - 第一版第13页
Spring Cloud基础教程 - 程序猿DD - 第一版第14页
Spring Cloud基础教程 - 程序猿DD - 第一版第15页
Spring Cloud基础教程 - 程序猿DD - 第一版第16页
Spring Cloud基础教程 - 程序猿DD - 第一版第17页

试读结束, 可继续读3页

13积分/C币 立即下载 >