SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)
微服务强调每个服务都是单独的数据库
在不使用微服务的情况下可以采用分布式架构,通过Template来调用远程的Rest接口
但这种方式维护起来很麻烦,而且有很多弊端。
一、环境搭建
1、首先搭建SpringBoot框架
使用Spring Initializr快速搭建SpringBoot框架时可能会遇到访问超时的问题。此问题有两种解决的办法:
①将服务源改成https://start.aliyun.com,这种方法是采用alibaba的springboot架构模型,会和常规的模型有出入。(这种方法有的时候搭建出来没有pom文件,不能被识别为maven项目,这种情况采用第二种方法即可)
②将服务源改成http://start.springboot.io,这种方式是采用传统的springboot架构模型,只是这个是国内源。
SpringCloud的学习结合:https://spring.io/projects/spring-cloud-alibaba 和 https://github.com/alibaba/spring-cloud-alibaba/wiki进行学习
依赖版本说明:


因为我使用的Nacos版本是2.0.0的,所以SpringCloud版本选用2.2.7.RELEASE,相应的SpringBoot的版本采用2.3.12.RELEASE
1、首先添加SpringCloudAlibaba依赖
//将依赖放在dependencyManagement中继承该父项目的子类必须显示的声明才能使用。
//一般都会采用这种方式来继承一个版本管理器,因为中只能继承一个,一般来说公司都会有一个父Springboot项目,我们可以在中继承该项目。
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${project-version}//version是2.2.7.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
${springCloud-version}
pom
import
至此,SpringCloudAlibaba的环境就已经搭建好了。
二、注册中心Nacos
1、单机模式
①搭建分布式架构,通过分布式架构来搭建微服务架构
通过RestTempate来实现调用远程的rest接口
首先添加RestTemplate的配置类
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
然后调用restTemplate的方法:getforObject(),通过传入微服务的服务名和返回值类型来实现远程接口的调用。
②启动 进入到nacos的bin目录,在cmd中运行 startup -m standalone
③复制输出的网址到浏览器进行访问 默认账号和密码都是nacos
④在每个微服务(子SpringBoot项目)中加入nacos依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
④在配置文件中配置nacox
应用名称,nacos会把它当做是服务名称
spring:
application:
name: order-service
cloud:
nacos:
server-addr: ip:8848
discovery:
username: nacos
password: nacos
#命名空间,用于拆分服务(可以将服务拆分为生产环境和测试环境)
namespace: public
⑤这时候服务注册与发现就会自动将我们的服务注册到nacos注册中心
⑥此时直接在浏览器访问的话会报404错误,是因为nacos的执行原理是依赖负载均衡器来调用微服务的。此时只需要在RestTemplate的配置类上加入注解@LoadBalanced即可为服务端配置负载均衡。(该负载均衡采用的是轮询机制)即:
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
nacos执行原理:

创建永久实例:通过:spring.cloud.nacos.discovery.ephemeral: false 哪怕宕机了也不会删除实例
2、集群模式部署nacos
①修改application.properties文件,修改端口号,数据源使用mysql,修改mysql数据库的连接参数
②修改cluster.conf.example文件(现将其拷贝一份,然后将名字修改为cluster.conf)
③修改startup文件,将占用内存修改小一点。
④安装Nginx并启动,第一次启动可能会一闪而过,这时查看日志,如果有错误则修改监听端口,如果没错误则说明启动成功(windows启动Nginx本身就是一闪而过)
在启动之前还应该加入(Nginx是最常见的软件负载均衡)
upstream nacoscluster{
server ip:8849;
server ip:8851;
server ip:8860;
}
及修改
location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}
⑤将application.yml中的服务器地址改为Nginx的地址启动即可
三、微服务负载均衡器Ribbon
内置很多负载均衡的策略,我们可以通过覆盖掉这些配置,有两种方式:
1、通过配置类的方式进行修改
①新建一个Ribbon的配置类,注意该配置类不能放在扫描包能扫到的位置,要不然会冲突
@Configuration
public class RibbenRandomRuleConfig {
/方法名一定要叫这个/
@Bean
public IRule iRule(){//IRule是所有负载均衡策略的父接口
return new RandomRule();
}
}
在启动类上加上注解:
@RibbonClients(value = {
@RibbonClient(name = "stock-service",configuration = RibbenRandomRuleConfig.class)
2、通过配置文件的方式进行修改
权重
stock-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
Spring Cloud LoadBalancer:是Spring Cloud官方自己提供的客户端负载均衡器,用于替代Ribbon
使用:
①首先设置Ribbon为禁用,或者在依赖中排除Ribbon(建议使用依赖排除)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--将Ribbon排除掉-->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netfix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
在配置中加入:
spring:
cloud:
loadbalancer:
ribbon:
enable: false
②定义配置类,配置Bean,定义自己的负载均衡策略
③在启动类上加注解@LoadBalancerClients(),使用方法和Ribbon相同,只是注解不同。
SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)的更多相关文章
- springboot 初始化 web 项目 启动报错。。。一直解决不了
1. 一个简单的SpringBoot项目,启动时报错信息: ERROR 18688 --- [cat-startStop-1] org.apache.catalina.core.ContainerBa ...
- Nginx启动出错 error while loading shared libraries:
在centos5.7 32位上编译安照 nginx-1.1.16 出错 [root@localhost conf]# /usr/local/nginx/sbin/nginx/usr/local/ngi ...
- (转)Nginx启动出错 error while loading shared libraries
[root@localhost conf]# /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx: error while loading s ...
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
有时候,当你把你的springboot项目打成可执行的jar,放在linux上启动时,发现启动超级慢: 这往往是因为springboot内置tomcat启动时实例化SecureRandom对象随机数策 ...
- Nginx学习之十一-Nginx启动框架处理流程
Nginx启动过程流程图 下面首先给出Nginx启动过程的流程图: ngx_cycle_t结构体 Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个N ...
- 关于Nginx启动成功,浏览器不能访问的解决办法
本人初学Nginx,第一天配置成功并能通过浏览器进行访问. 第二天重新打开,将Nginx启动,但是浏览器却访问不了. 执行 ps aux|grep nginx ,执行结果如下,的确Nginx服务已经启 ...
- 解决Nginx启动失败
一.Nginx下载http://nginx.org/en/download.html 二.Nginx启动失败原因1.本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start ...
- 解决GitLab的Forbidden和Nginx启动失败
通过宝塔安装的GitLab突然出现Forbidden,原因居然是IP并发过大,IP被禁 解决方法: 登录服务器,编辑文件 /etc/gitlab/gitlab.rb ,将下面的截图内容放开注释(默认 ...
- Nginx学习——Nginx启动、停止、重启和信号控制以及平滑升级
1.Nginx 启动与停止 (1)启动方式 启动格式:Nginx可执行文件地址 -c Nginx配置文件地址 /etc/local/nginx/sbin/nginx -c /root/dufy/ngi ...
随机推荐
- C++STL 中的数值算法(iota、accumulate、adjacent_difference、inner_product、partial_sum)
以下算法均包含在头文件 numeric 中 ##1.iota 该函数可以把一个范围内的序列从给定的初始值开始累加 先看用法. 例: 假设我需要一个长度为10,从5开始递增的序列 vector<i ...
- JAVA 进程线程详解
线程和进程 一.进程 进程是指运行中的程序,比如我们使用QQ,就启动该进程分配内存空间. 进程是程序的一次执行过程,或是正在运行的一个程序.是一个动态的过程:有它自升的产生,存在和消亡的过程 二.线程 ...
- 安卓记账本开发学习day1
学习了一些简单的布局与界面设计
- 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶
今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...
- Unity减小安装包的体积(210MB减小到7MB)
概述 项目简介 由于是公司内做的项目,不方便开源,就只分享优化过程吧. 项目信息 逐日是一个移动端单机小游戏,使用Unity开发,目前已将项目使用的Unity升级到2019.4.14f1c1 (3e5 ...
- Protobuf在Python中的应用(序列化数据)
1.了解Protobuf Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数据的结构化,然后可 ...
- mybaitis查询 (数据库与实体类字段名不相同)
1.这是我的数据库字段名和实体类字段名 2.方法 方法一: 查询的结果标题 会跟实体类的属性一一匹配,一定要一致就算数据库字段和属性不一致,我们可以把查询结果设置一个别名,让别名=属性名 方法二:使用 ...
- p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞
系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...
- Element中使用el-select选中后不显示值
<el-select v-model="form.data" placeholder="选择参数" @change="changeThis&qu ...
- 流量治理神器-Sentinel 究竟是怎么做到让业务方接入简单?
大家好,我是架构摆渡人,这是流量治理系列的第10篇原创文章,如果有收获,还请分享给更多的朋友. 做业务开发,需要考虑业务的扩展性.做基础框架开发,需要考虑如何让业务方接入,使用简单,尽量不要耦合在业务 ...