美文网首页我爱编程
springboot+springcloud基于Eureka的注

springboot+springcloud基于Eureka的注

作者: 大力水手_ | 来源:发表于2018-04-10 18:12 被阅读0次

    springcloud带来的优点    

        1.相比于传统式集中式架构来说,他提供了一种新的架构思想,相比于原来的架构它更容易水平或者垂直的扩展

        2.在编译时 由于将整个项目拆分成很多小块,编译更加的迅速,方便我们调试。

        3.在部署的时候,当项目上线,不会因为一个点挂掉整个项目瘫痪,只会单点故障

        4.在大型的互联网公司,用到的开发语言不止一种,拆分成服务的话,我们只需要调接口取数据即可。

        5.极大程度上的进行了松耦合

        下图是我理解的分布式架构,水平不够,很片面。

    一个简单的分布式

    springcloud有哪些缺点

        1.拆分项目时的颗粒度不好确定,一个服务最好只做一件事情。

        2.对于分布式的架构来讲,或者说在使用这种微服务式的架构时,数据的一致性是一个大的问题。我看了很多篇文章讲的都很深奥,也没有个学习的方向。可以百度搜索一些经常用的方式二阶段提交和三阶段提交,分布式事务等等。在大的电商平台,一般都有对账的系统以及消息队列方式或者重试机制(当然重试机制一定要保证接口的正确性以及接口的幂等性,而这个幂等性的度要由自己控制)或者补偿机制。


    切入正题,今天想学习一下springcloud,于是看了一些博文,总结了一些。

    项目搭建环境

        使用开发工具Eclipse,jdk1.7,maven

    eclipse版本

    构建项目

        目标:搭建一个maven工程,其下有两个子模块,一个服务,一个注册中心

          1.  首先我们搭建一个maven的父工程,搭就完事儿了。

    maven的父工程

        2.我们搭建一个注册中心,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

        不多说废话开搭。

        选中父工程new maven module 这里我直接使用的是jar形式的包

        然后在pom中添加我们需要的依赖,我不知道为什么简书一复制xml 就只有文本了,那些标签全都不能复制过来,希望大神们指导下。

    dependency dependency management

    接下来是我们application.yml中的配置,eureka是一个高可用的注册中心,没有缓存,实时发送心跳包检测注册的服务是否在线,默认情况下eureka server既是一个server也是一个client,所以在client我们配置的registerwithrureka 为false 和fetchRegistry false都是为了表明自己是一个server。

    server:

        port: 8761

    eureka:

        instance:

            hostname: localhost

        client:

            registerWithEureka: false

            fetchRegistry: false

            serviceUrl:

                defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    贴出springboot启动类的代码:@EnableEurekaServer表明自己是一个注册中心

    package cn.yiside.eurekaServer;

    import org.springframework.boot.SpringApplication;

    import org.springframework.boot.autoconfigure.SpringBootApplication;

    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

    @SpringBootApplication

    @EnableEurekaServerpublic class EurekaServerApplication {

    public static void main(String[] args) {

    SpringApplication.run(EurekaServerApplication.class, args);

    }

    }

    启动成功banner样式的显示

    接下来我们访问 http://localhost:8761去看一下

    springcloud的可视化管理

    我们发现注册的application没有任何东西,因为我们没有注册,并且springcloud进入了保护模式

    默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,这就可能变得非常危险了----因为微服务本身是健康的,此时本不应该注销这个微服务。

      Eureka Server通过“自我保护模式”来解决这个问题----当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

    自我保护模式是一种对网络异常的安全保护措施。使用自我保护模式,而已让Eureka集群更加的健壮、稳定。

    在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false来禁用自我保护模式

    这个问题并不影响我们继续去进行接下来的步骤,所以继续。

    3.我们要搭建一个服务,并且将其注册到注册中心中。

    类似于注册中心的搭建模式,但是启动类和配置要有一些变化

    启动类代码

    @RestController注解是集成了controller和ajax的默认注解,需要导入jackson包

    package cn.yiside.eurakaClient;

    import org.springframework.beans.factory.annotation.Value;

    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.RequestParam;

    import org.springframework.web.bind.annotation.RestController;

    @SpringBootApplication

    @RestController

    @EnableEurekaClient

    public class EurakaClientApplication {

    public static void main(String[] args) {

    SpringApplication.run(EurakaClientApplication.class, args);

    }

    @Value(value="${server.port}")

    private String port;

    @RequestMapping("hi")

    public String sayHi(@RequestParam String name){

    return "你好"+name+"我来自"+port;

    }

    }

    application.yml配置如下

    表示我们注册的地址,以及我们这个服务的端口和发布到注册中心的服务名

    eureka:

        client:

            serviceUrl:        

                defaultZone: http://localhost:8761/eureka/

    server:

        port: 8762

    spring:

        application:

            name: service-sayHi

    启动我们的服务。

    注册服务成功

    Status显示UP表示服务正常,可以使用。其它取值DOWN、OUT_OF_SERVICE、UNKNOWN等,只有UP的微服务会被请求。

    访问我们的服务,看展示效果

    访问成功

    今天只学习了Eureka 注册中心 springCloud还有很多要学,加油。

    以下是后期需要学习的springcloud的其他组件

    分布式/版本化/集中化配置 - spring cloud config 服务注册发现 -Netflix Eureka 

    路由 -Netflix Zuul 服务之间的点对点调用(Service-to-service calls)

     负载均衡-Netflix Ribbon 

    断路器 -Netflix Hystrix 分布式消息

    五大核心组件:

    服务注册发现 -Netflix Eureka

    配置中心- spring cloud config

    负载均衡-Netflix Ribbon

    断路器 -Netflix Hystrix

    路由(网关) -Netflix Zuul

    相关文章

      网友评论

        本文标题:springboot+springcloud基于Eureka的注

        本文链接:https://www.haomeiwen.com/subject/hndnhftx.html