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)
技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...
随机推荐
- JavaWeb——Listener
一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...
- 推荐一个ASP.NET网站内容管理系统源码
许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...
- 反应器(Reactor)和主动器(Proactor)
网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的.其中libevent是基于Reactor实现的,而boost.asio是基于Proactor实现的.Reactor和P ...
- 【原】无脑操作:express + MySQL 实现CRUD
基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...
- BPM配置故事之案例10-获取外部数据
老李:Hi,小明,我又来了 小明:--这次又怎么了. 老李:之前的物资管理方式太混乱了,这段时间我整理了采购物资清单,现在都录入到我们的ERP中了,以后申请物资改成从ERP数据选择吧.物资明细表我也做 ...
- .NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
今天微软发布了 .NET Core 1.1 Preview 1(详见 Announcing .NET Core 1.1 Preview 1 ),紧跟 .NET Core 前进的步伐,我们将示例站点 h ...
- Xamarin.Android活动的生命周期
一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...
- Xamarin.Android-捕获未处理异常(全局异常)
一.前言 android中如果出现了未处理的异常,程序会闪退,这是非常不好的用户体验,很多用户会因此卸载APP,因此未处理的异常是应该尽力避免的. 有些很难避免的异常(如:IO.网络等),应在代码中进 ...
- Atitit 会话层和表示层的异同
Atitit 会话层和表示层的异同 会话层 这一层也称为会晤层或对话层.在会话层及以上的更高层次中,数据传送的单位没有另外再取名字,一般都可称为报文. 会话层虽然不参与具体的数据传输,但它却对数据传输 ...
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...