spring/spring boot/spring cloud开发总结
背景
针对RPC远程调用,都在使用dubbo、dubbox等,我们也是如此。由于社区暂停维护、应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring cloud架构。在此期间使用spring boot项目尝试开发,结果良好。所以想重构原spring项目至spring cloud一步一步进行,因此开发中会出现各种问题。
问题
问题总是伴随着开发一步一步显露出来,遇到问题总要去解决:
spring cloud相关问题:
1.跨系统调用,传参对象接收不到问题
解决:服务方在对象参数前@RequestBody即可(ps:public void saveUser(@RequestBody User user)),数据存在报文体中。
2.系统间重试问题,会多次调用是正常业务数据出现重复,造成垃圾数据
解决分为2步且所有都在调用方配置,第一步新增类:
return中是参照feign.Retryer,至于方法名字任意。
@Configuration
public class FeignConfig {
@Bean
public Retryer feignRetryer() {
return new Retryer.Default(100, SECONDS.toMillis(1), 0);
}
}
第二步:
# Max number of next servers to retry (excluding the first server)
sample-client.ribbon.MaxAutoRetriesNextServer=1对于集群服务会随机选择下一个服务,有可能还是选择访问自己。不是集群设置为1会访问自己会造成2次访问。
sample-client 对于多个服务端,sample-client可以删掉。
查看配置发现,针对配置部分请点击这里:
# Max number of retries on the same server (excluding the first try)
sample-client.ribbon.MaxAutoRetries=1 发现没用
3.部署服务器,注册中心服务均存在,但是无法访问获取数据,报服务拒绝连接
解决:其实这算是个注意点,平时开发都是SpringApplication启动项目,打包部署服务时tomcat端口与server.port(spring boot)配置不一致造成。猜测spring cloud访问从注册中心获取主机与端口,根据主机和端口访问服务但是服务tomcat设置端口与配置不一致,造成问题。
spring boot相关问题:
1.项目使用SpringApplication启动正常,但是访问不了页面
解决:@ComponentScan只扫描当前程序所在包结构(包含子包)中声明
| - src
| | - main
| | | - java
| | | | - com
| | | | | - controller/service/dao
| | | | - SpringApplication.java
2.请求url响应问题,不同后缀响应不同
解决:该场景是因为spring boot有多个视图解析器,ajax请求可以直接使用a/b,页面a/b.htm
spring相关问题:
1.spring调用spring cloud项目问题
解决:使用HttpClient设置请求头Content-Type:application/json访问spring cloud对外系统(gateway)即可,至于内网外网访问随意
异常问题:
spring cloud有Hystrix断路由,虽然好处多多,但是访问每个接口都要相应断路由接口,如果处理逻辑有区别还好,没有区别我就不说了。由于我们是统一返回,所以针对出现问题使用全局异常拦截记录日志返回失败,这有个缺点是访问通异常可以处理,至于超时这些没有访问通就要捕获。
讨论
学艺不精,有些都是似懂非懂,希望大神能指点指点。其中有点疑惑,spring访问spring cloud最后都打成war包部署发布,个人觉得spring应该也可以注册到注册中心,希望知道的可以分享。
spring/spring boot/spring cloud开发总结的更多相关文章
- 255.Spring Boot+Spring Security:使用md5加密
说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...
- 256.Spring Boot+Spring Security: MD5是加密算法吗?
说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...
- Spring Boot+Spring Security:获取用户信息和session并发控制
说明 (1)JDK版本:1.8(2)Spring Boot 2.0.6(3)Spring Security 5.0.9(4)Spring Data JPA 2.0.11.RELEASE(5)hiber ...
- Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台
Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud
- 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚
新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(三):搭建开发环境
生成项目模板 登录Spring Initializr生成Spring Boot项目模板,保存到本地. 地址:https://start.spring.io/ 导入Maven项目 使用IDE导入生成的M ...
- spring Boot+spring Cloud实现微服务详细教程第二篇
上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...
- spring Boot+spring Cloud实现微服务详细教程第一篇
前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...
- Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)
技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...
随机推荐
- css样式之border-image
border-image-source 属性设置边框的图片的路径[none | <image>] div { border: 20px solid #000; border-image-s ...
- ES6(块级作用域)
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...
- 《如何使用Javascript判断浏览器终端设备》
WEB开发中如何通过Javascript来判断终端为PC.IOS(iphone).Android呢? 可以通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. va ...
- 似懂非懂的localStorage和sessionStorage
一.区别 相信很多人都见过这两个关于HTML5的新名词!HTML5种的web storage包含两种存储方式:localStorage和sessionStorage,这两种方式存储的数据不会自动发给服 ...
- iOS 小知识点(持续更新)
1.如何通过代码设置Button title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...
- App解读
一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...
- mysql 远程访问权限
MySQL默认没有开启远程访问的权限,需要手动打开,步骤如下: 1.通过命令行登录2.mysql>update user set host = '%' where user = 'root';这 ...
- 解决托管在Windows上的Stash的Pull request无法合并的问题
最近尝试合并一个托管在Windows的Stash系统中的pull request时,发现合并按钮被禁用,显示有冲突不能合并,但是在diff页面中没有现实冲突,而且代码实际上并没有任何冲突. 后来在这篇 ...
- 在 Linux 中使用 Git 及其 和 Eclipse 的集成
##参考资料## 我是通过阅读<Pro Git>这本书学习 Git 的,我读的时候还是第一版的英文版,现在已经出第二版了,而且英文版和中文版都有.英文第二版的地址是 [https://gi ...
- Chrome 控制台不完全指南
Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...