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就可以看到如下页面:

时间: 2024-11-08 17:43:49

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

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

当初步的学习了spring boot,了解了spring boot的基本实现过程后,我就正式开始学习spring cloud,首先就从Eureka服务治理开始. 服务治理包含三个核心的角色:服务注册中心.服务提供者和服务消费者,他们相对独立,新的服务要向服务注册中心注册,新的消费者会向服务注册中心索引服务列表. 一番了解之后,让我想到了人才招聘.在我看来,现在普遍存在的招聘形式也是分为了三个部分:招聘网站或者人才市场.发布招聘需求的企业.需要找工作的人.当然了,也可以把企业和人换一下位置,那就是

springcloud 微服务架构之eureka服务注册与发现

springcloud 微服务架构之eureka服务注册与发现 视频播放地址: http://www.365yg.com/item/6434376645263491585/

springcloud微服务四:服务容错保护Hystrix断路器

通过前边的学习,服务注册中心.服务提供者和服务消费者都成功建立并运行起来,而且通过默认的配置restTemplate及@loadbalanced注解开启了负载均衡. 在默认的情况下,负载均衡策略是线性轮询的方式,也就是说在客户端获取到的服务列表中依次交替,例如开启了三个服务server1.server2.server3,那么在线性轮询时,就会按这个顺序来调用. 我之前是开启了两个服务,一个端口是1001,另一个是2001,那么在之前的这种情况下,如果我关闭其中一个服务,就比如这里关闭1001端口

利用WSRR Studio定制服务生命周期和治理策略

服务是 SOA 架构成功实施的关键因素之一,服务的生命周期包括服务需求的提出,分析,设计,实现,部署以及相关的版本变更,服务下线等一系列过程,贯穿于 SOA 的整个生命周期当中. 为了保证服务能够满足 SOA 的基本http://www.aliyun.com/zixun/aggregation/8912.html">设计原则, 例如可重用性,符合相关标准及规范等,需要对服务的生命周期进行管理,这一过程可能会包含多个角色,包括业务分析人员,开发人员,IT 实施人员,SOA 治理人员等,其中

浅谈自服务的大数据治理在企业数字化转型中的妙用

一.用户与大数据之间的鸿沟让数字化转型困难重重 本文讲的是浅谈自服务的大数据治理在企业数字化转型中的妙用,目前虽然不少企业已经广泛建设大数据平台,但却难以直接使用平台中的大数据,企业人员与大数据之间存在着一道难以逾越的鸿沟. 这道鸿沟的出现导致企业在使用大数据的过程中出现数据不可知.需求难实现.数据难共享等一系列问题: 1.数据不可知,数据价值无处可寻 企业环境中到底有哪些数据,这些数据在哪里,慢慢变成了大数据平台的"迷",用户迷失在动辄几十PB的数据中.对于企业管理者来说,无法从管理

解析云服务三种模式的安全策略

对于不同的云服务模式,安全关注点是不一样的;当然,也有一些是这3种模式需要共同关注的,即无论是IaaS.PaaS,还是SaaS,都应该关注的安全,如:数据安全.加密和密钥管理.身份识别和访问管理. 安全事件管理.业务连续性等等.IaaS层安全策略:IaaS涵盖了从机房设备到其中的硬件平台等所 有的基础设施资源层面.IaaS层的安全,主要包括物理与环境安全. 主机安全.网络安全. 虚拟化安全.接口安全.1.物理安全:是指保护云计算平台免遭地震.水灾.火灾等事故以及人为行为导致的破坏.2.主机安全:

DockOne微信分享(一零三):Kubernetes 有状态集群服务部署与管理

本文讲的是DockOne微信分享(一零三):Kubernetes 有状态集群服务部署与管理[编者的话]本次分享将深入介绍Kubernetes如何满足有状态集群服务对容器编排系统提出的新需求,包括如何使用Kubernetes的动态存储请求与分配机制来实现服务状态的持久化存储,以及与高效部署和运行有状态集群服务相关的Kubernetes新特性,如Init Container.PetSet (StatefulSet)等.最后通过一个MySQL集群实例详解在Kubernetes中如何轻松部署一个高可用的

三成淘宝卖家提供超国标服务 电商进入个性时代

中新网杭州3月15日电(记者 夏毅)记者了解到,除了国家要求的标准消费者保障服务,越来越多的http://www.aliyun.com/zixun/aggregation/7953.html">网店卖家开始尝试提供更完善.更人性化的消保服务.15日,来自淘宝网行业运营事业部最新抽样调研显示,近三成的淘宝卖家已经或愿意提供超过国标的店铺服务,甚至有些服务还慢慢演变成新的行规. 阿里巴巴集团首席战略官曾鸣认为,未来的电子商务模式一定是以消费者为中心的.按需定制的C2B模式. 事实上,随着电商行

将Tunnelier注册成Windows服务

  最近硬盘坏道了,没有过保,HP可给换了块新的,重装了x64版的win7,下载Tunnelier的时候意外发现,官网上有Running Tunnelier as a Windows Service条目,之前一直以为只有MyEnTunnel可以注册成Windows服务,原来通过工具可以将任何程序注册成服务.文章中提到了三个工具: srvany(windows Resource Kits中的工具) FireDaemon 一个比srvany更易用的工具 Non-Sucking Service Man