问题1.Param 'serviceName' is illegal, serviceName is blank
Web server failed to start. Port 8080 was already in use:
这说明 bootstrap.yml 文件并没有加载,但是我有引入下面的依赖,还是无法加载 bootstrap.yml
org.springframework.cloud
spring-cloud-starter-bootstrap
解决办法:在运行环境中加入: spring.cloud.bootstrap.enabled=true ,这样就能加载bootstrap.yml文件了
问题2.Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway
Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency
出现这种异常的原因是因为 gateway 的web依赖和springboot的web依赖发生冲突,gateway的web依赖是 webflux ,而 springboot为 web
解决办法:移除springboot的web依赖 spring-boot-starter-web,这样就能正常启动了(放心,gateway底层的webflux也可以启动springboot项目)
问题3.Unable to find GatewayFilterFactory with name
原因是:在配置文件中filters下的 name 空着,没有写,因为我只是留了个位置,准备添加过滤器的,但是没有加上去
解决办法:要么加上顾虑器,要么直接注释掉或删除 name
问题4.配置好gateway、nacos、sentinel,写好接口之后,测试接口的时候,你输入的url的ip和端口是你gateway的端口!!!!!!!!!!!!!!!!
如:你要访问的服务的url为:http://127.0.0.1:8080/user-service/user/addUser,而你的gateway的端口为80,那么你输入的url就为:http://127.0.0.1:80/user-service/user/addUser,所有请求都经过网关!!!!!!从而隐藏了真实的服务ip和端口
我他妈跟个傻逼一样,一眼就能看出的问题卡了一天,真他妈想给自己一巴掌!!!
问题5.Error creating bean with name 'orderListener': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'redisTemplate' is expected to be of type 'org.springframework.data.redis.core.StringRedisTemplate' but was actually of type 'org.springframework.data.redis.core.RedisTemplate'
发生这种情况的原因为:redis操作对象的,参数名错误
错误演示:
@Resource
private StringRedisTemplate redisTemplate;
正确演示:
@Resource
private StringRedisTemplate stringRedisTemplate;
真是奇葩的问题........
问题6.
feign远程调用失败,原因是调用方法的url中忘记加 baseUrl了,想给自己两巴掌,不过还好,问题不大,能解决
这个bug引发了很多莫名其妙的问题,如:程序只要启动,rocketmq消费者的监听器就会启动等问题
问题7.
公共类中自定义返回响应数据的工具类,通过下面这种方式获取不到响应对象:
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
通过 @Resource或@Autowired 属性注入也不能获取到
原因可能是公共模块中没有启动类扫描的缘故
解决办法:在调用该工具类的方法时,传入响应对象response
问题8.定义在公共模块中的全局异常处理器,无法捕捉自己抛出的异常
原因:@SpringBootApplication 注解只能扫描其同级别的包及其子包,无法扫描父模块中的资源
解决办法:在子模块的启动类上加 @ComponentScan 注解,设置的扫描范围包括到全局异常处理器所在包,如:
@SpringBootApplication
@EnableDiscoveryClient // 启动 nacos 客户端
@EnableFeignClients // 启动 feign 远程调用
@ComponentScan(basePackages = {"com.zero"}) // 配置扫描的范围,要包括到全局异常处理器所在类,否则手动跑出的异常,全局异常处理器捕捉不到
public class MemberApplication {