一、搭建springcloud demo

选择了springboot2.1.7.RELEASE,springboot的最新版本。但是文章使用SpringBoot : 1.5.9,以至于在搭建的时候,springcloud相关包不兼容。解决办法:使用netflix相关联的包。

springcloud构成:

eurake+feign(Ribbon)+ hystrix(dashbord)+zuul+config

eurake:注册中心  eurake server+client

feign:是一个rest客户端。是对resttemplate的封装,帮助开发者定义和实现依赖服务接口的定义。在编写依赖接口调用时,我们只需要编写接口和注解,来实现调用。

hystrix:熔断路由。在服务不可用时,转跳到默认访问,以防返回错误到前端。通过近乎实时的指标,监控和警报来优化发现故障的时间。feign.hystrix.enabled=true,开启熔断

zuul:网管服务

config:配置服务

二、迁移代码

搭建项目完成之后,迁移代码。

迁移代码

创建src/main/resources source文件夹(我的开发工具为eclispe,创建mvn项目之后,并没有这个文件夹,需要手动创建。该文件为资源文件夹,放配置文件,sql的mapper.xml文件等),创建

” application.yml”(该文件为配置文件),该文件中配置服务端口,mybatis配置,spring配置(数据库配置及redis配置),项目路径配置等。

复制mapper.xml文件,mapper,service到项目中,创建controller。

2.集成插件

在集成oss、redis等插件时,需要添加config等配置文件,添加config包,与controller平级。目的:创建javabean,实现插件的初始化,同spring 。该文件必须使用@Configuration注解,创建JavaBean,如需参数,使用@Value实现配置初始化。在项目Application中添加@ComponentScan,扫描config包。

@Configuration与@ComponentScan说明:

@ComponentScan该注解主要同spring的context:component-scan。将带有@Configuration的类扫描入spring容器,创建Javabean。

创建完成之后,可以使用@Autowired使用这些Javabean。

在穿件Javabean的过程中,我使用了new来创建实体类,由于通过new创建对象,该对象不在spring applicationContext中,导致new出来的对象,里面引用通过spring创建的对象为null,出现报错。

3.微服务间的调用

在调用其他微服务时,必须在项目Application中添加@EnableFeignClients(basePackages={“”,””})注解,微服务不能自己调用自己,会出现报错。所以需要注意在使用@ComponentScan目录下的类不能访问自己,不然会出现报错。

三、在迁移过程中遇到的坑

1、在订单调取消息服务时,消息服务也在调用订单,导致超时。

2、传递对象时,不允许两个@responsebody,改用将参数添加到一个对象。

3、迁移时,有些方法使用RequestContextHolder.getRequestAttributes()).getRequest()获取当前request,导致和客户端request不一致。io处理也在不同request中。