SpringCloud系列研究Eureka服务发现.docx
《SpringCloud系列研究Eureka服务发现.docx》由会员分享,可在线阅读,更多相关《SpringCloud系列研究Eureka服务发现.docx(14页珍藏版)》请在冰豆网上搜索。
![SpringCloud系列研究Eureka服务发现.docx](https://file1.bdocx.com/fileroot1/2023-6/28/5ad200dd-bfc2-4786-9377-87aac9c20ff0/5ad200dd-bfc2-4786-9377-87aac9c20ff01.gif)
SpringCloud系列研究Eureka服务发现
SpringCloud系列研究
第一部分Eureka服务发现
第二部分Eureka服务注册
最近工作时间不是很忙,于是准备系统的研究下SpringCloud,之前就了解到SpringCloud为微服务体系开发提供了一整套的解决方案,包括:
服务注册与发现、服务消费、服务保护与熔断、网关、分布式调用追踪、分布式配置管理等,于是想借此机会记录下整个研究的过程。
在开始写代码之前先简单介绍下SpringCloud都有哪些常用的服务,以下内容完全来源于网络:
SpringCloudConfig:
配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
SpringCloudBus:
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与SpringCloudConfig联合实现热部署。
SpringCloudNetflix:
针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Dashboard等。
1、Eureka,服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。
所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
2、Zuul,网关,所有的客户端请求通过这个网关访问后台的服务。
他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。
并从Eureka获取注册的服务来转发请求。
3、Ribbon,即负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
4、Feign,服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。
它默认会使用Ribbon来实现负载均衡。
5、Hystrix,监控和断路器。
我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。
6、HystrixDashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
7、Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。
而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。
这样就不需要挨个打开一个个的页面一个个查看。
SpringCloudforCloudFoundry:
通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
SpringCloudSleuth:
日志收集工具包,封装了Dapper,Zipkin和HTrace操作。
SpringCloudDataFlow:
大数据操作工具,通过命令行方式操作数据流。
SpringCloudSecurity:
安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
SpringCloudConsul:
封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
SpringCloudZookeeper:
操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
SpringCloudStream:
数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
SpringCloudCLI:
基于SpringBootCLI,可以让你以命令行方式快速建立云组件。
其中有几个是分布式系统中常用的组件,如:
服务发现—NetflixEureka、客服端负载均衡—NetflixRibbon、断路器—NetflixHystrix、服务网关—NetflixZuul、分布式配置—SpringCloudConfig,号称分布式开发五大神兽。
最后简单介绍一下我的开发环境,OS:
windows764位;IDE:
IntelliJIDEA2017.2.3;JDK:
1.8.0_31;编译工具:
Gradle,后面所有的Demo示例均基于这个环境。
SpringCloud系列研究---Eureka服务发现
这里选择gradle
直接next
继续next
最后点击finish
二:
创建Eureka服务中心
选择第一步中创建的项目,右键选择new--->module
选择SpringInitializr,然后next
这里输入Group、Artifact,并选择GradleProject,然后next
选择EurekaServer,然后点击next
输入modulename然后finish
我这里把几个都勾上了,然后OK
三:
代码
代码很简单,只需要在springboot工程的启动application类上加一个@EnableEurekaServer注解就行了,具体如下:
1packagecom.cloud.microservice.demo.eurekaserver;
2
3importorg.springframework.boot.SpringApplication;
4importorg.springframework.boot.autoconfigure.SpringBootApplication;
5importflix.eureka.server.EnableEurekaServer;
6
7@EnableEurekaServer
8@SpringBootApplication
9publicclassEurekaServerApplication{
10
11publicstaticvoidmain(String[]args){
12SpringApplication.run(EurekaServerApplication.class,args);
13}
14}
eurekaserver的配置文件appication.yml:
1server:
2port:
9090
3
4eureka:
5instance:
6hostname:
localhost
7client:
8registerWithEureka:
false
9fetchRegistry:
false
10serviceUrl:
11defaultZone:
http:
//${eureka.instance.hostname}:
${server.port}/eureka/
启动工程,打开浏览器访问:
http:
//localhost:
9090,界面如下:
SpringCloud系列研究---Eureka服务注册
通过注解@EnableEurekaClient表明自己是一个eurekaclient,也即服务的提供者。
启动类代码如下:
1packagecom.cloud.microservice.demo;
2
3importorg.springframework.boot.SpringApplication;
4importorg.springframework.boot.autoconfigure.SpringBootApplication;
5importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;
6importflix.eureka.EnableEurekaClient;
7importorg.springframework.context.annotation.ComponentScan;
8
9@SpringBootApplication
10@EnableDiscoveryClient
11@EnableEurekaClient
12@ComponentScan("com.cloud.microservice.demo")
13publicclassDemoProviderApplication{
14
15publicstaticvoidmain(String[]args){
16SpringApplication.run(DemoProviderApplication.class,args);
17}
18}
为了把启动类和接口分离,我这里新建了一个provider包,把Rest接口UserProvider.java放在该路径下,工程结构如下:
UserProvider.java代码如下:
1packagecom.cloud.microservice.demo.provider;
2
3importflix.feign.FeignClient;
4importorg.springframework.web.bind.annotation.RequestMapping;
5importorg.springframework.web.bind.annotation.RequestMethod;
6importorg.springframework.web.bind.annotation.RequestParam;
7importorg.springframework.web.bind.annotation.RestController;
8
9@FeignClient(name="ms-demo-provider")
10@RestController
11@RequestMapping("/demo/user")
12publicclassUserProvider{
13
14@RequestMapping(value="/1.0/findAll",method=RequestMethod.GET)
15publicStringfindAll(@RequestParamStringname)
16{
17return"hello,thisis"+name;
18}
19}
配置文件application.yml如下:
registerWithEureka表示是否注册自身到eureka服务器,由于当前该应用就是eureka服务,为了在Eureka服务上能看到注册信息,这里设为true;fetchRegistry表示是否从eureka服务器获取注册信息。
1server:
2port:
8090
3
4eureka:
5instance:
6hostname:
localhost
7client:
8registerWithEureka:
true
9fetchRegistry:
false
10serviceUrl:
11defaultZone:
http:
//${eureka.instance.hostname}:
9090/eureka/
12
13spring:
14application:
15name:
ms-demo-provider