记录学习及搭建springcloud过程的问题及想法。
1:整体流程
client-->nginx-->微服务(springcloud+springboot)
2:构建springcloud
2.1:主要部件:eureka(基础的服务,服务注册及发现)将springboot服务注册在springcloud框架中进行管理。
eureka-server(建立一个单独的集群,高可用)
eureka-client(在springboot的项目中引用,让项目在eureka-server中注册服务)
使用:eureka-server:创建一个单独的集群,eureka-client:与springboot项目在一起。
2.2:问题及解决,那么多springboot项目,如何相互之间调用呢?
ribbon/feign:(这两个主件都可以,单纯从应用上说明为啥使用feign)
理由: 使用ribbon,需要定义http,一般采用restTemplate,这样去做接口的调用有点low。
采用feign形式只需要把调用的服务定义成接口形式,然后引入调用即可)
使用:与springboot项目在一起。
2.3:问题及解决,配置文件要重复写(比如连接数据库的配置),且如果变化配置还需要重启项目,怎么能统一配置,且修改配置不用重启服务就有效呢?
config:(配置主件)
做法:1:需要git支持(这里采用git方式,将配置文件传到git,让微服务读取git中的配置)
git的使用:git的创建,仓库搭建,本地仓库与远程仓库的同步
1:注册github用户,登录
2:settings设置SSH
$ ssh -T git@github.com 验证是否成功
3:在projects中创建工程
+下的new repository(我的创建的工程名是config,所以下面的地址是config.git)
git@github.com:zhaodabao140/config.git(选用SSH的形式,如果是http的提交会提示输入账号密码)
4:在本地的仓库与远程仓库关联同步
git remote add origin git@github.com:zhaodabao140/config.git
2:配置写好了,怎么让项目可以读取到配置呢?
如果只是配置到这里,那么就需要执行:http://localhost:9005/actuator/XXX,即哪个服务需要读取配置就找到对应服务的地址执行,很麻烦,
集群一般都不会单一去执行,所以需要结合springcloud中的另外一个主件bus。
3:如何解决config高可用的问题?
我的做法是建立config集群,这个集群在eureka中注册的服务名是同一个名字。
4:现在项目有开发环境,测试环境,生产环境,怎么部署的项目读取对应的配置呢?
查阅了一些资料,当前的就是不同配置写在git的不同文件或者目录下,或者在一个人文件中,按不同名字配置,项目读取时候指定读取的文件或者
使用哪个名字下的配置。(还是觉得这个不够灵活,不知道有没有其他的方法)
遇到的问题:
1:项目中的application.properties改名为bootstrap.properties(注意:修改的是config client中的,不是server中的)
原因:否则项目启动失败,找不到配置的信息,报空指针异常,bootstrap的优先级大于application,会先读取bootstrap,再读取application。
2:注册eureka的配置还是要写在项目的application.properties中
原因:否则找不到注册的是什么服务
3:获取的配置文件会不会中文乱码的问题?(亲测,可用,可能由于版本问题修改的方法有些变化,但是根本的还是把文件重写,改为UTF-8,
疑问点:对于这种的问题,springcloud config应该会类似的配置才应该啊,或是我没有发现吗?)
解决:参考 https://www.cnblogs.com/xifenglou/p/11177581.html
使用:创建一个单独的集群。
2.4:问题及解决,基上文所说,不想配置了git,然后还要分别执行,引入bus?
bus:
使用:与config集群在一起,与springboot项目在一起,两边配置。
原文:https://www.cnblogs.com/dblog/p/12145701.html