springboot+springcloud基于Eureka的注册和服务

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容