SpringCloud

版本

SpirngBoot:2.0.0.M3
SpringCloud:Finchley.M2

Eureka Server 单机

  1. Eureka Server既是Server,又是Client,自己向自己注册
    (1)作为Server,server.port指定运行端口,则Server Url为:http://ip:server.port/eureka/
    (2)作为Client,指定Server Url
    eureka.client.service-url.defaultZone
    (3)Server只作为服务注册中心,自己向自己注册,没有意义
    eureka.client.register-with-eureka:false
  2. 指定服务名,否则在服务注册中心的服务注册表中,应用名显示为默认的UNKNOWN
    spring.application.name
  3. @EnableEurekaServer

Eureka Server高可用

3个Eureka Server,每个Eureka Server向其它2个进行注册,并获取服务,运行时Server之间会同步服务注册表,默认0ms;
Eureka Client启动时,会向所有Eureka Server注册

  1. Eureka Server既是Server,又是Client,需要向集群中其它Eureka Server注册,并获取其它Server的服务注册表
    (1)作为Server,指定运行端口
    (2)作为Client,指定其他Server的url,多个以,隔开
    (3)不能像单机情景一样,此时需要向其它Server注册,但eureka.client.register-with-eureka默认为true

  2. 指定服务名

  3. @EnableEurekaServer

Eureka Server高可用,其它配置

  1. 使用SpringBoot的Security组件,添加验证功能,没有验证的Client不能访问Eureka Server
    (1)security.basic=true,开启验证
    security.user.name和security.user.password指定用户名和密码
    (2)微服务系统中的所有Client访问Eureka Server时,使用eureka.client.service-url.defaultZone指定Eureka Server,需要将验证的用户名和密码加上
    http://userName:password@ip:port/eureka/

  2. 服务实例名 instanceId
    默认格式: host_name:application_name:application_port
    可以使用eureka.instance.instance-id进行修改

  3. Eureka Client通过Eureka Server提供的REST API进行服务的注册、续约、获取和下线等工作。例如注册是1个POST请求,获取是1个GET请求,可以使用/eureka/apps获取Eureka Server上的服务注册表

  4. 自我保护

Eureka Client

  1. 向Eureka Server注册
    eureka.client.service-url.defaultZone
  2. 指定应用名,否则使用默认的UNKNOWN
    spring.application.name
  3. 指定运行端口
    server.port
  4. @EnableEurekaClient

默认配置

  1. 续约Renew、获取Fetch默认时间:30s
  2. 默认从Eureka Server获取服务注册表 eureka.client.fetch-registry
  3. 默认向Eureka Server注册 eureka.client.register-with-eureka
  4. 如果Eureka Server在指定时间内,没有收到Eureka Client的心跳,会将其从服务注册表中删除。默认90s

服务拆分模型

X 水平复制
Y 功能解耦
Z 数据分区

X 将应用程序水平复制,通过LB运行完全一样程序的多个副本,来实现应用程序的伸缩性,提供处理请求的容量

Y 针对功能来分解,将不同业务模型分成多个服务

  1. 单一职责,松耦合,高内聚
    每个服务只负责1个业务
    松耦合:服务之间耦合度低,修改1个服务,其它服务不需要跟着修改
    高内聚:服务内部,相关行为都聚集在1个服务内

  2. 关注度分离
    (1)按职责,例如订单服务,商品服务
    (2)按通用性,与业务无关的公共服务,例如用户服务,消息服务
    (3)按粒度,不太好把握,随业务变化而变化,例如订单服务包括订单和支付功能,在用户数量增长到比较大时,需要拆分

Z 每个服务器负责整体数据的1个子集

  1. 先考虑拆分业务功能,再考虑拆分数据
  2. 考虑数据是否有状态
    如果完成1个业务需要多个服务协作,则这个业务是有状态服务,在多个服务中流转的数据时有状态的数据。在微服务中,需要将有状态的数据转化成无状态的数据

例如用户登录,单体应用使用Session存储用户信息,Session又存放在Web容器,供所有业务模块共享。在微服务架构中,根据业务拆分成一个一个部署在独立Web容器上的服务,将用户信息迁移到分布式缓存中存储,让登录服务成为分布式系统中单独的节点,供所有模块共享

问题

  1. Mybatis resultType和resultMap
  2. MyBatis 实体类implements Seria
  3. foreach()
    allowMultiQueries=true

@Transactional

Spring支持声明式事务和编程式事务
编程式事务需要编写事务逻辑代码,不但麻烦,而且会对业务代码进行侵入
声明式事务,基于AOP,本质上是对业务方法进行拦截,在业务方法执行前,创建1个事务,在执行完业务方法后,根据它的执行情况,提交事务或回滚事务。声明式事务使用注解@Transactional,且不对业务代码进行侵入

  1. 自动提交
    默认情况,DB自动提交,每个SQL语句是1个单独的事务,如果SQL执行成功,事务会隐式的自动提交;如果执行失败,则会隐式的回滚
    但是对于事务来说,它包括1组操作,需要关闭自动提交,Spring会默认关闭自动提交

  2. 连接关闭,C3P0连接池会回滚未提交事务

(1)可以放在接口、接口方法、类、类方法上
(2)放在接口/接口方法上时,只有使用动态代理时才会生效
(3)放在类上,对类的所有public方法生效;但会被方法级别的注解覆盖
(4)只对public方法生效
(5)只有被外部调用时,才生效;类内部调用,不会生效

  1. 属性
    value String 可选的限定描述符,指定使用的事务管理器
    propagation enum: Propagation 可选的事务传播行为设置
    isolation enum: Isolation 可选的事务隔离级别设置
    readOnly boolean 读写或只读事务,默认读写
    timeout int (in seconds granularity) 事务超时时间设置
    rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组
    rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
    noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组
    noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

  2. 事务隔离级别
    默认,使用底层DB的事务隔离级别。即已提交读
    (1)未提交读,1个事务可以读取,其它事务修改但未提交的数据。该级别不可防止脏读,不可重复读和幻读
    (2)已提交读,1个事务只能读取,其它事务提交后的数据。可以防止脏读,但不可防止不可重复读和幻读。一般DB设置的事务隔离级别
    (3)可重复读,1个事务可多次执行某个查询,返回的数据是一样的。可以防止脏读和不可重复读,但不可防止幻读
    (4)序列化,所有事务依次执行,互相不影响。可以防止脏读、不可重复读和幻读。但是非常消耗性能

  3. 事务传播行为
    在开始当前事务之前,一个事务已经存在,可以选择几种方式来执行它们
    (1)REQUIRED,默认。如果当前存在事务,加入该事务,否则创建1个新的事务
    (2)REQUIRES_NEW,如果当前存在事务,创建1个新事务,并将当前事务挂起
    (3)SUPPORTS,如果当前存在事务,加入该事务,否则以非事务运行
    (4)SUPPORTED,以非事务运行,如果当前存在事务,挂起当前事务
    (5)NEVER,以非事务运行,如果当前存在事务,抛出异常
    (6)MANATORY,如果当前存在事务,加入,否则抛出异常
    (7)NESTED

  4. 回滚
    在事务上下文,抛出异常会导致事务回滚。Spring会捕捉异常,并根据规则进行回滚

默认情况下,所有RuntimeException的子类及Error都会导致回滚

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

推荐阅读更多精彩内容