spring cloud第一天——莫名其妙历险记

最近因为之前了解了dubbo,spring cloud的源代码(粗颗粒的了解,嘻嘻~),今天没事,搜搜网上(垃圾)教程,想学着搭建个spring cloud。没料到又开启了自闭的一天(有新手在公司做项目的感觉了,又有那味了),还好我是公费自习。

看的搭建教程是如下(但是他好像也不是原创):
使用IDEA搭建springcloud微服务(一)----父工程的搭建
使用IDEA搭建springcloud微服务(二)-----Eureka服务注册中心(BASE认证)
使用IDEA搭建springcloud微服务(三)----微服务服务方cloud-provider
使用IDEA搭建springcloud微服务(四)----微服务消费方cloud-client
使用IDEA搭建springcloud微服务(五)----微服务运行展示

他的版本和我的电脑不同,存在的几个问题:

1. 我目前用的IDEA版本2017.2.6搭建项目时:
①选项略有些不同,比如feign,我这儿只有选openfeign
②spring boot没他那低版本而就用了默认选的2.2.1
③我搭建出来生成的pom里springcloud版本是<spring-cloud.version>Hoxton.RC1</spring-cloud.version>,并且我这pom里还有<repositories>,和他的教程不符,不改成他那样也没事,无伤大雅。
④学到了接口&内部类且该类又要实现某方法,看起来很诡异的文件。(UserFeignClient.java)

spring cloud第一天——莫名其妙历险记_第1张图片
IDEA创建出module后,红框内这些文件可以删掉,看着更清爽。


开启一天踩坑之路:

一上午,按照他的步骤搭建完之后(夸一波他的教程,的确相当详细,一步一步,在垃圾遍地的教程中,可以看出费了不少心血。对没有玩过分pom的同学是一个很好的示范),但是启动不了,自闭了。
一、
Eureka服务注册中心(BASE认证) cloud-discovery
启动不了,报错

java.lang.IllegalStateException: Failed to introspect annotated methods on class

解决办法:
https://blog.csdn.net/qq_32198005/article/details/78435648

In maven, I changed the scope like this: <scope>provided</scope> to <scope>compile</scope> and it worked!!. 

然后,又报错

Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception;  nested exception is java.lang.IllegalStateException: Can't configure anyRequest after itself

看不懂,但是又是什么Chain的又是什么Security的,我想是不是启动项里静态内部类WebSecurityConfigure错了,干脆注了

@EnableEurekaServer
@SpringBootApplication
public class CloudDiscoveryApplication {
	public static void main(String[] args) {
		SpringApplication.run(CloudDiscoveryApplication.class, args);
	}
	/*@EnableWebSecurity
	static class WebSecurityConfigure extends WebSecurityConfigurerAdapter {
		@Override
		protected void configure(HttpSecurity http) throws Exception {
			// 在/eureka/**端点忽略csrf验证
			http.csrf().ignoringAntMatchers("/eureka/**");
			// 配置使请求需要通过httpBasic或form验证
			http.authorizeRequests().anyRequest()
					.authenticated()
					.and()
					.formLogin()
					.and()
					.httpBasic();
			super.configure(http);
		}
	}*
}

欸,能启动了,很神奇。不懂。有无懂哥说说看原理。
spring cloud第一天——莫名其妙历险记_第2张图片
中途岔道:
因为想试试看什么地方变动可以跑起来,所以copy了一份程序到其他文件夹,用那份程序试验,没想到如此又搞了一些幺蛾子:
1.编码UTF-8(csdn只能手动复制,别点代码右上角“复制”功能,会中文乱码的)、jar包的神奇问题
2.莫名其妙说pom没slf4j
3.client里的注解@EnableFeignClients,@EnableDiscoveryClient死活导不到jar包

于是,又换回在原程序文件上操作了,不过也仍出现一个莫名其妙的坑(在下文cloud-client里再写)。
一些其他乱七八糟的改动,但是发现不必要:

<parent>
		
		<groupId>com.cloudgroupId>
		<artifactId>spring-cloudartifactId>
		<version>1.0-SNAPSHOTversion>
parent>

<properties>
		<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
		<java.version>1.8java.version>
		
		<spring-cloud.version>Finchley.SR2spring-cloud.version>
properties>
	
<dependencies>
	
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-tomcatartifactId>
			<scope>compilescope>
		dependency> 
	
		<dependency>
			<groupId>org.slf4jgroupId>
			<artifactId>slf4j-apiartifactId>
			<version>1.7.25version>
		dependency>
dependencies>

	

二、
微服务服务方cloud-provider
注册中心启动了之后,我以为事儿就成了,抓紧想体验一下远程调用的舒适感,不料,一启动provider

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

解决办法:
https://www.cnblogs.com/expiator/p/9696887.html
provider的配置中添加(而注册中心的配置中是有的(见篇首他的教程),不知provider这里为何还得再配一次)

eureka:
  client:
    registerWithEureka: false   
    fetchRegistry: false

至此,三座大山终于翻过了两座o(╥﹏╥)o,provider也“顺利”启动了
spring cloud第一天——莫名其妙历险记_第3张图片
三、
微服务消费方cloud-client

上文说到,换回在原程序文件上操作了,不过也仍出现一个莫名其妙的坑:
client启动时它就自闭了——

2019-11-08 17:51:52.368  INFO 56440 --- [  main] o.s.c.n.e.s.EurekaServiceRegistryRegistering application CLOUD-CLIENT with eureka with status UP
	                            Unregistering application CLOUD-CLIENT with eureka with status DOWN

解决办法:
百度到的说法都是说缺spring-boot-starter-web,但我明明有啊,莫名其妙的,于是我重复放个依赖,

<dependencies>
		
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>
		
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>	

特么的就好了(但只是能启动而已,当时18岁的我不知道后面还有一个天坑在等着我o(╥﹏╥)o)
在这里插入图片描述但是,新问题是,访问网址localhost:8082/user/1,错误,显示springboot的错误页面,F12看请求报500,http://localhost:8080/ 里看 Instances currently registered with Eureka 里 No instances available(不过后来跑通了后这里也啥都没,和教程的显示不同。是网页后台抽风了吗???)
控制台报错:com.netflix.client.ClientException: Load balancer does not have available server for client: cloud-provider
又开始自闭百度,看了很多垃圾,最后终于看到了一篇懂哥:
https://blog.csdn.net/IManiy/article/details/86505652
可以从注释的密集程度看到debug的辛酸坎坷:
client的application.yml

#ribbon:
 # okhttp:
  #  enabled: true
  #restclient:
   # enabled: true
  #eureka:
   # enabled: true

#hystrix:
 # command:
  #  default:
   #   execution:
    #    isolation:
     #     thread:
      #      timeoutInMilliseconds: 5000
	  
ribbon:
  eureka:
    enabled: false
cloud-provider:
  ribbon:
    listOfServers: http://localhost:8081

provider的pom

#报错啦  Cannot execute request on any known server
#security:
#  basic:
#    enable: false  #经测试,不顶用

#ribbon:
 # okhttp:
  #  enabled: true
  #restclient:
   # enabled: true

折腾了一天,终于:
spring cloud第一天——莫名其妙历险记_第4张图片

------------------------------谢邀,以上------------------------------------
人在美国,刚下飞机。
bug滚出我的魔仙堡。
这么好的天气的日子不用来debug真是太可惜了呢。

-----------附github代码下载地址
https://github.com/FA-CAI/springcloud

你可能感兴趣的:(Spring,Boot,spring,cloud,spring,boot,eruka)