spring cloud第一天——莫名其妙历险记_Stack Piston的博客-程序员宅基地

技术标签: spring boot  spring cloud  Spring Boot  eruka  

最近因为之前了解了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)

在这里插入图片描述
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);
		}
	}*
}

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

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

<parent>
		<!--<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.1.RELEASE</version>
		<relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
		<groupId>com.cloud</groupId>
		<artifactId>spring-cloud</artifactId>
		<version>1.0-SNAPSHOT</version>
</parent>

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!--<spring-cloud.version>Hoxton.RC1</spring-cloud.version>-->
		<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
	
<dependencies>
	<!-- tomcat支持 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>compile</scope>
		</dependency> 
	<!-- 新增酸辣粉4j 也可直接在父类pom加而一了百了。(后来发现不需要,应该是这份copy工程是直接复制来的而打开项目导致的蛋疼)  抽风了,加了后当时正常,但在再次点开pom时发现pom头<project标签也仍仍仍仍仍冒红,maven bug了 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
</dependencies>

<!--	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>-->	

二、
微服务服务方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也“顺利”启动了
在这里插入图片描述
三、
微服务消费方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>
		<!--web依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--我再放一次-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</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

折腾了一天,终于:
在这里插入图片描述

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CW_SZDX/article/details/102977012

智能推荐

Hive(十二)--Hive函数大全_默一鸣的博客-程序员宅基地

一、关系运算:1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述:如果表达式A与表达式B相等,则为TRUE;否则为FALSE 举例: Hive>select 1 from lxw_dual where 1=1; 12. 不等值比较: 语

Android布局中margin,padding,align的用法和区别_android paddinghorizontal_李努力workhard的博客-程序员宅基地

Android布局中margin,padding,align的用法和区别 一、margin的用法 android : layout_marginxxx的用法是指当前组件距离其父组件在xxx方向上的边距 比如说:android:layout_marginleft = "30px" -..._android paddinghorizontal

latex 出现Missing { inserted-程序员宅基地

问题原因:出现_\两个符号相连问题出现在我的文档的部分代码:_\hat{x}修改:_{\hat{x}}即可

matlab代码保密:pcode *.m_matlab中p代码_ddd...e_bug的博客-程序员宅基地

【转】如何对matlab .m代码文件进行加密https://blog.csdn.net/jizhidexiaoming/article/details/86553841_matlab中p代码

2018.7.27学习笔记_小爱0514的博客-程序员宅基地

二进制逆向题目解析给你个礼物你能收到吗 打开程序你会发现,它让你输入提取码: 你可以随便输入几个字符,会出现: 如果一直输入错无的话,它就会陷入一个循环: 所以,先用ida打开,用Shift+12调出字符串表,你会发现字符串表没有汉语,而程序出来的提示是汉语,所以我们无法在字符串表中找到我们想要的字符串,那么我们只能从在左侧的函数列表里查看main函数,直接进入主函数: ...

【题库】上海市学校心理咨询师考试-普通心理学-考点解析 3.4 注意的特征_"期末复习300题56.单选题19.\"专心致志\"和\"一心二用\"分别对应注意的 a .集中性"_小白心理的博客-程序员宅基地

上海学校心理咨询考试时间:每年6月底7月初。小白心理将会在2021年的考试前,平均每天更新1个考前冲刺视频,欢迎各位关注。一、讲解视频 上海学校心理咨询-普通心理学-考前冲刺 3.4 注意的特征 二、部分题目1、在同一时间内,一个人能够清楚地感知到的物体的数量比别人的多,说明此人注意的( )。A 范围广B 稳定性好C 分配恰当D 转移快2、注意稳定的相反状态是( )。A_"期末复习300题56.单选题19.\"专心致志\"和\"一心二用\"分别对应注意的 a .集中性"

随便推点

nRF52833-QIAA-R nordic无线收发芯片_weng13924672287的博客-程序员宅基地

这需要强大可靠的蓝牙硬件和nRF52833器件,其扩展的温度范围和内存支持全部蓝牙mesh堆栈和应用软件,非常适合我们的智能照明和控制解决方案组合。nRF52833 SoC的大容量闪存和RAM内存可支持动态多协议功能,这在专业照明等应用领域是一项优势,当应用能并发支持低功耗蓝牙和蓝牙mesh/Thread/Zigbee功能,它们的配置、调试以及与照明mesh网络的互动都可以通过智能手机使用低功耗蓝牙来完成。这款SoC器件的105℃运作性能,在通常需要较高环境温度的专业照明应用领域具有更进一步的优势。..._nrf52833-qiaa

在HashMap中将可变对象用作Key,需要注意什么?_将对象放入hashmap的key,修改_dongcheng_2015的博客-程序员宅基地

本文属于转载:原文链接。目录1、什么是可变对象2、HashMap如何存储键值对3、在HashMap中使用可变对象作为Key带来的问题4、如何解决1、什么是可变对象可变对象是指创建后自身状态能改变的对象。换句话说,可变对象是该对象在创建后它的哈希值可能被改变。在下面的代码中,对象MutableKey的键在创建时变量 i=10 j=20,哈希值是1291。然后我们改变实例的变量值,该对象的键 i 和 j 从10和20分别改变成30和40。现在Key的哈希值已经变成1931。_将对象放入hashmap的key,修改

手机开发平台指南_JLUFENGFENG的博客-程序员宅基地

手机客户端软件开发最大的困难就是平台不统一,手机开发平台太多。 手机可分为智能手机开发和feather phone手机。开发平台可分为开放式平台和封闭式平台,开放式平台包括symbian、windows mobile、linux、iPhone、Android、BlackBerry、j2me、brew等,支持手机应用程序通过OTA下载和安装;封闭式平台包括MTK、展讯、TI、飞利浦等。下

Redis与memcache的区别_memcache redis区别_牛哞哞杂记的博客-程序员宅基地

Redis与memcache的区别如下:1.数据结构:Memcache仅能支持简单的K-V形式,Redis支持的数据更多;2.多线程:Memcache支持多线程,Redis支持单线程,CPU利用Memcache利用率更高;3.持久化:Redis支持持久化,Memcache不支持持久化;4.分布式:Redis做主从结构,而Memcache服务器需要通过hash一致化来支撑主从结构;5.虚拟..._memcache redis区别

CRT与扩展CRT(板子整理)_crt板子_Code92007的博客-程序员宅基地

思路来源https://www.cnblogs.com/zwfymqz/p/8425731.html板子整理1.CRT中国剩余定理,利用逆元构造同余方程组的一个解,要求方程组模数之间互质,x==c[i](mod m[i])#include<bits/stdc++.h>using namespace std;typedef long long ll;ll ..._crt板子

JAVA中的那些名词解释!_weixin_30439067的博客-程序员宅基地

1.JDO:(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API.作用:用于存取某种数据仓库中的对象2.JPA:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.Sun引入新的J...

推荐文章

热门文章

相关标签