背景

       针对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开发总结的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  5. 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚

    新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(三):搭建开发环境

    生成项目模板 登录Spring Initializr生成Spring Boot项目模板,保存到本地. 地址:https://start.spring.io/ 导入Maven项目 使用IDE导入生成的M ...

  7. spring Boot+spring Cloud实现微服务详细教程第二篇

    上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...

  8. spring Boot+spring Cloud实现微服务详细教程第一篇

    前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...

  9. Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)

    技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...

随机推荐

  1. javaScript之BOM操作1

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ie6 ie7 ie8 ie9兼容问题终极解决方案

    放下包袱,解决低版本兼容问题   这是一个老生常谈的问题,自然解决这个问题的方案也比较多,下面整理了一些解决方法: 1.强制使用高版本渲染模式. 强制使用Edge模式来解析网页代码 <meta ...

  3. BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]

    4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discu ...

  4. 在Ubuntu中搭建.NET开发环境

    Mono简介Mono是Xamarin公司C#和CLR的ECMA标准基于开发的一个开源的.NET实现版本,它是Linux平台上开发.NET应用程序首选.同时其也提供了Xamarin.IOS和Xamari ...

  5. 微信官方开源UI库-WeUI

    概述 WeUI是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计,可以令用户的使用感知更加统一.包含button.cell.dialog.toast.article.icon等各式元素 ...

  6. ReactNative入门(安卓)——API(上)

    Alert - 弹窗 通过 Alert.alert() 方法调用唤起原生弹窗,点击会触发 onPress 回调(参考下方代码)并清除弹窗. import React, { AppRegistry, C ...

  7. Linux3 在VMware中搭建CentOS6.5虚拟机

    前言:      本文主要是我在大家hadoop集群之前 ,需啊先安装CentOS虚拟机,记录在此,作为参考.如果能帮助到其他人,自然是更好啦. =========================== ...

  8. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

  9. 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...

  10. stanford corenlp自定义切词类

    stanford corenlp的中文切词有时不尽如意,那我们就需要实现一个自定义切词类,来完全满足我们的私人定制(加各种词典干预).上篇文章<IKAnalyzer>介绍了IKAnalyz ...