九、Spring Cloud系列:实战经验总结
来源:互联网 发布:李宁淘宝旗舰店 编辑:程序博客网 时间:2024/05/16 18:50
GitHub项目cloud-phantom,里面包含全套的Spring Cloud生态体系的构建。从 eureka/config/zuul/hystrix/turbine/admin/zipkin等配置一应俱全,同时配置说明文档(正在不断完善),欢迎star
一、 spring cloud config动态刷新
1.动态刷新
项目依赖中需要引入actuator的依赖包,并且需要动态刷新的容器bean上需要加上@RefreshScope注解才生效。
二、Feign的使用注意事项
1.FeignClient编写
不要在类上使用@RequestMapping注解,否则在使用fallback的时候,会报错(重复声名),因为注解会被继承。
每个参数的注解都要写全,例如@RequestParam(value=”name”)
- 没写注解的参数,Feign会把参数放进body中,以post方式进行请求,即使请求方法是get。
2.打印Feign日志
- 第一种方式:在配置类中增加如下内容
@Beanpublic Logger.Level feignLoggerLevel() { return Logger.Level.FULL;}
- 第二种方式:使用配置文件
logging.level.<fignClient的全路径>=debug//例如logging.level.com.kingboy.feign.UserFeign
3.feign使用Hystrix断路器不生效,不进行回退方法
不知道什么原因,总之配置没有打开,在配置文件中新加如下内容
feign.hystrix.enabled=true
三、Eureka使用
1.将实例以ip方式注册进Eureka(默认hostname)
在客户端配置中加入以下内容
eureka.instance.prefer-ip-address=true
2.在Eureka Client中配置多个注册中心地址
eureka: client: service-url: defaultZone: http://localhost:7000/eureka/,http://localhost:7001/eureka/
3.Eureka服务发现注册慢的解决
Eureka Server配置更改的清理时间,让无效服务快速被清理掉
#eureka配置eureka: server: #设置扫描失效服务的间隔时间 eviction-interval-timer-in-ms: 20000
Eureka Client端的配置,更改续约和超时时间
#注册中心配置eureka: instance: #使用IP进行注册 prefer-ip-address: true #配置实例的注册ID instance-id: ${spring.cloud.client.ipAddress}:${server.port} #心跳时间,即服务续约间隔时间(缺省为30s) lease-renewal-interval-in-seconds: 5 #发呆时间,即服务续约到期时间(缺省为90s) lease-expiration-duration-in-seconds: 10
4.更改Eureka Cliet的实例ID
#注册中心配置eureka: instance: #配置实例的注册ID instance-id: ${spring.cloud.client.ipAddress}:${server.port}
其实并不是同时注册到多个注册中心,如果第一个注册成功,则接下来的不注册。如果第一eureka注册失败,才会尝试注册到第二个eureka上
四、开发环境的困扰
1.每个人都需要运行eureka和config才能使用
开发中每个人必须先启动本地eureka和config才能正常启动自己的开发服务。所以我们可以在一台服务器上部署一个eureka和config中心,将项目中的eureka和config地址全部指向服务器对应url即可。这样每个人只需要启动自己开发的服务即可。(但是这样做也有缺点)
五、分布式事物
事物让人很头疼,一开始想了数据库事物,分布式事物等处理方式,但是从效率和可用性上来说都不行。所以最好的方式就是不用事物,采用补偿的方式(可以参考TCC),用代码来保证数据一致性。(问过jd的某技术大牛,也没有使用事物,服务太多,效率太低)
六、日志如何记录,并可追踪?
我是使用logback进行日志记录的。基本思路是在服务中添加seluth的包,通过配置可以在日志中打印出traceId,spanId,parentId,(traceId标识整个请求的ID,spanId,本服务的本次请求id,parentID,调用我这个服务的服务请求id)
同时还使用logstash的依赖将日志保存成json文件,然后使用ELK对日志进行集中处理和搜索。
可以参考我的github项目cloud-phantom中的provider和consumer模块的处理
七、跨域问题
这是一个小的解决点了,我们项目使用vue进行sp开发,会产生跨域,只要在项目(更多是在zuul网关)中配置如下内容
@Configurationpublic class CrossFilter extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { String[] origins = {"*"}; registry.addMapping("/**") .allowedOrigins(origins) .allowCredentials(true) .allowedMethods("*") .maxAge(3600); }}
- 九、Spring Cloud系列:实战经验总结
- Spring Cloud实战(二)-Spring Cloud Eureka
- Spring Cloud实战(二)-Spring Cloud Eureka
- spring cloud系列
- spring cloud 系列文章
- spring-cloud系列-Eureka
- Spring Cloud 断路器Hystrix实战
- Spring Cloud 核心综合实战
- Spring Cloud Sleuth进阶实战
- Spring Cloud Sleuth进阶实战
- Spring Cloud Sleuth进阶实战
- spring cloud开发实战讲解
- Spring cloud系列九 Hystrix的配置属性优先级和详解
- spring boot&&cloud干货系列
- spring boot&&cloud干货系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- 职业天花板来自认识的局限性
- WINS服务器
- linux用户增加sudo权限
- Android平台的兼容相关概念详细整理
- java队列BlockingQueue和ConcurrentLinkedQueue多线程并发、以及CountDownLatch与CyclicBarrier的使用
- 九、Spring Cloud系列:实战经验总结
- 【观察】推进西藏信息化建设 联想为西藏打上更深“智慧”烙印
- kafka_2.11-1.0.0单机安装
- Linux c语言程序运行时动态加载库函数
- Palindromic Substrings
- 异常类
- Our 6 Must Reads for First-Time Managers to Hit the Ground Running
- iOS加速计和陀螺仪
- linq <一>