精选列表

搜索[SpringCloud],共1270篇文章
优秀的个人博客,低调大师

springcloud微服务二:Eureka服务治理之服务注册中心

当初步的学习了spring boot,了解了spring boot的基本实现过程后,我就正式开始学习spring cloud,首先就从Eureka服务治理开始。 服务治理包含三个核心的角色:服务注册中心、服务提供者和服务消费者,他们相对独立,新的服务要向服务注册中心注册,新的消费者会向服务注册中心索引服务列表。 一番了解之后,让我想到了人才招聘。在我看来,现在普遍存在的招聘形式也是分为了三个部分:招聘网站或者人才市场、发布招聘需求的企业、需要找工作的人。当然了,也可以把企业和人换一下位置,那就是:招聘网站或者人才市场、找工作的人发布的简历、需要招聘的企业。 那么这里的招聘网站或者人才市场就如同Eureka服务治理中的服务注册中心,不管是企业的招聘需求还是人的简历,都可以看做一种需求的同时看成一种服务。当有了一个这种新的服务或者需求后会发布在网站上或者人才市场,实际上就相当于Eureka服务治理中,新的服务通知注册到服务注册中心。而我们企业查找相关简历,或者找工作的人查找相关的招聘需求,就是客户端向注册中心索引服务。 在这个过程中,招聘网站、企业和找工作的人是各自独立的,由招聘网站把企业和人联系起来,前提就是企业和人知道网站的地址,这就如同在Eureka服务治理的服务提供者和服务消费者的application.properties文件中配置eureka.client.serviceUrl.defaultZone来指定服务注册中心。 有了一点简单的理解之后,就是实际的项目构建,首先需要构建一个基础的spring boot项目作为服务注册中心,勾选web选项,这样会创建一个上一篇结构的项目。然后在pom.xml文件中加入Eureka的以来配置: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> 以及如下的dependencyManagement,指定spring cloud的版本: <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 这里需要注意的是,spring cloud的版本号是以英国伦敦地铁站的名字命名的,按首字母A-Z的顺序排,不同的spring cloud版本相对应的spring boot的版本是有限制的,否则无法使用。 具体的对应需要参考官网说明,目前比较新的spring boot版本是1.5.2,而对应的spring cloud的版本是Dalston,我这里例子中用的是1.3.8的spring boot,因此spring cloud版本是Brixton。 配置好依赖之后,下一步就是在创建项目时自动生成的那个类中加入@EnableEurekaServer注解,来启动一个服务注册中心,如下: @EnableEurekaServer @SpringBootApplication public class EurekaServer1Application { public static void main(String[] args) { SpringApplication.run(EurekaServer1Application.class, args); } } 然后便是在基本的配置文件application.properties中进行一些必要的配置: #应用名,服务名,如果不指定就是unkown spring.application.name=eureka-server #服务端口,实际上就是tomcat端口,浏览器访问或者其他地方调用时需要用的端口 server.port=1000 #实例的主机名 eureka.instance.hostname=server1 #设置是否向注册中心注册,默认是true eureka.client.register-with-eureka=false #是否需要去检索寻找服务,默认是true eureka.client.fetch-registry=false #指定注册中心 eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/ 就这样,一个简单的Eureka服务注册中心就完成了,除了引入依赖包的配置、properties的基本配置外,就是在代码中加了一个@EnableEurekaServer,非常的简单。 然后浏览其访问localhost:1000或者server1:1000(这里使用主机名需要配置ip和主机的映射)就可以看到如下界面: 如果有新的服务注册到服务注册中心,那么在上图中红框标注的地方就会有所显示,就比如如果我修改application.properties文件,去掉这一段配置: #设置是否向注册中心注册,默认是true eureka.client.register-with-eureka=false #是否需要去检索寻找服务,默认是true eureka.client.fetch-registry=false 那么该服务注册中心就会把自己也当做一个服务注册到这个注册中心中,那么就会如下图所示: 上边所实现的是单机版的服务注册中心,而微服务架构的九大特征之一就是高可用性,也就是需要注册中心从单机模式变为集群模式,使其中某个注册中心出现故障的情况下不影响整个业务系统的运行。 在spring cloud中,这个实现过程就十分的简单,简单到我们只需要在上述的过程中仅仅做一个很小的配置修改就可以了。 一是去掉eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false的配置,使得注册中心可以自己把自己注册为服务,二是在指定注册中心的时候指定所有的注册中心,三是修改端口和主机实例名,修改后的配置如下: spring.application.name=eureka-server server.port=1000 eureka.instance.hostname=server1 eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/ 同样的,我们需要在另一个注册中心中把配置文件改为类似下边的样子: spring.application.name=eureka-server server.port=2000 eureka.instance.hostname=server2 eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/ 然后我们启动其中一个注册中心后再访问各自的页面,会看到如下所示: 这时候会看到我们的服务注册中心已经成为了集群模式,但是server2是unavailable的,并不可用,而当我们把另一个注册中心server2启动后,就会看到有些内容有了变化,server2也是可用的了,同样的,如果访问server2的页面,会看到这里列出server1的状态。 正常情况来说,两个注册中心是应该在不同的服务器中运行的,这样才能更好的实现高可用,所以就是两套代码。 但是在学习的过程中由于环境的限制,也为了方便,实际上就可以用一套代码,然后弄两个分别代表server1和server2的配置文件就可以了,文件命名需要遵循spring boot的约定规则,然后再application.properties文件中使用spring.profiles.active属性来指定运行的时候需要具体启用的篇配置就可以了,如图:

优秀的个人博客,低调大师

springcloud微服务三:Eureka服务治理之注册服务提供者及服务的发现和消费

当服务注册中心成功建立以后,就需要有服务的注册和消费,否则这个服务注册中心就没有了存在的意义,而实际上,一个简单的服务注册也是非常简单的,仅仅需要实现四部曲就好。 首先,还是建立一个基本的spring boot的项目,创建的时候选择web,然后在pom.xml文件中加入Eureka的依赖,和服务注册中心的maven配置一样,这里就不再罗列代码。 第二步,就是修改application.properties文件,指定端口和服务名称以及注册中心的地址: server.port=1001 spring.application.name=hello-service eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/ 因为上一步中实现了注册中心的集群模式,因此这里可以指定两个,如果有更多的服务注册中心,还可以指定更多,中间以逗号分隔。 第三步,使用注解开启自动装配,使服务能够向注册中心注册、向注册中心服务租约(实际上就是定时器持续发送心跳告诉服务注册中心自己还活着)、取消租约、查询服务列表等,这个注解是@EnableDiscoveryClient,添加以后的代码如下: @EnableDiscoveryClient @SpringBootApplication public class EurekaService1Application { public static void main(String[] args) { SpringApplication.run(EurekaService1Application.class, args); } } 第四步,我们说要进行服务注册,当上边一切准备工作做好以后,自然需要有服务才能注册,而这个服务就是一个看起来很普通的controller类,如图: @RestController public class HelloController { @Autowired private DiscoveryClient client; @RequestMapping(value="/hello",method=RequestMethod.GET) public String sayHello(){ ServiceInstance instance=client.getLocalServiceInstance(); return "hello "+instance.getHost()+","+instance.getPort()+","+instance.getServiceId(); } } 这里的DiscoveryClient可以获取注册到服务注册中心的服务的相关信息,并不是必须注入的,这里完全可以写成如下所示的代码: @RestController public class HelloController { @RequestMapping(value="/hello",method=RequestMethod.GET) public String sayHello(){ return "hello"; } } 当然了,因为只是了解服务注册的过程,所以这里仅仅这么简单,实际的业务逻辑自然不会是这样。 那么通过上边四步,一个能够注册到服务注册中心提供服务的服务就完成了,启动这个服务就会被注册到服务注册中心,我们可以通过服务注册中心的页面来查看: 成功的创建了一个服务并注册到注册中心,同样的,为了高可用,我们可以再建一个具有同样功能的服务,而这个过程就更加的简单,只需要更改一下端口号,也就是server.port,然后重新启动就可以,启动后会看到上边的页面如下(当然了,这里也是为了测试方便,实际情况也应该是在两台机器上运行的两套代码才对): 这里我们会看到已经有了两个同应用名的服务,端口分别是1001和2001。 而在上述页面中还需要注意的是那一段醒目的红色提示,它的意思就是说开启了自我保护机制,也就是说当服务失效后,有可能注册中心还会保留一段时间该服务的信息,这样就可能导致服务消费方获取服务列表的时候依然能够获取到这个服务,但是实际上向该服务发送请求的时候又无法成功请求,那么学习的过程中可以使用以下配置关闭自我保护机制,然后如果再访问注册中心的页面便不会再出现这个提示,也不会出现那种服务失效后还保留在注册中心的情况。 #设置是否开启自我保护机制,默认是true eureka.server.enable-self-preservation=false 服务注册好以后,下边就是服务的发现和消费,通常有ribbon和feign两种方式,而feign实际上也是以ribbon为基础的,这两种后边都还需要具体详细的学习,所以这里只简单的演示一下消费的过程,不做太详细的解释。ribbon可以实现负载均衡,这里使用最简单的模板实现。 首先还是建立一个基础spring boot项目,然后pom.xml中加入eureka和ribbon的依赖以及eureka的版本信息: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 然后application.properties文件内容如下: server.port=3001 spring.application.name=rabbit-client eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/ 再然后就是创建项目时生成的类中加入@EnableDiscoveryClient参数开启自动装配,以及注入服务消费模板并开启负载均衡: @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } 之后的这个步骤实际不是必要的,只是为了能够更直观的在页面中看到结果,所以加入一个controller类,输出服务的一些基本信息: @RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @RequestMapping(value="/hello",method=RequestMethod.GET) public String hello(){ return restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody(); } } 那么当我们启动这个消费端以后,页面访问localhost:3001/hello就可以看到如下页面:

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。