微服务强调每个服务都是单独的数据库

在不使用微服务的情况下可以采用分布式架构,通过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-alibabahttps://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启动出错问题)的更多相关文章

  1. springboot 初始化 web 项目 启动报错。。。一直解决不了

    1. 一个简单的SpringBoot项目,启动时报错信息: ERROR 18688 --- [cat-startStop-1] org.apache.catalina.core.ContainerBa ...

  2. Nginx启动出错 error while loading shared libraries:

    在centos5.7 32位上编译安照 nginx-1.1.16 出错 [root@localhost conf]# /usr/local/nginx/sbin/nginx/usr/local/ngi ...

  3. (转)Nginx启动出错 error while loading shared libraries

    [root@localhost conf]# /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx: error while loading s ...

  4. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    有时候,当你把你的springboot项目打成可执行的jar,放在linux上启动时,发现启动超级慢: 这往往是因为springboot内置tomcat启动时实例化SecureRandom对象随机数策 ...

  5. Nginx学习之十一-Nginx启动框架处理流程

    Nginx启动过程流程图 下面首先给出Nginx启动过程的流程图: ngx_cycle_t结构体 Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个N ...

  6. 关于Nginx启动成功,浏览器不能访问的解决办法

    本人初学Nginx,第一天配置成功并能通过浏览器进行访问. 第二天重新打开,将Nginx启动,但是浏览器却访问不了. 执行 ps aux|grep nginx ,执行结果如下,的确Nginx服务已经启 ...

  7. 解决Nginx启动失败

    一.Nginx下载http://nginx.org/en/download.html 二.Nginx启动失败原因1.本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start ...

  8. 解决GitLab的Forbidden和Nginx启动失败

    通过宝塔安装的GitLab突然出现Forbidden,原因居然是IP并发过大,IP被禁 解决方法: 登录服务器,编辑文件 /etc/gitlab/gitlab.rb  ,将下面的截图内容放开注释(默认 ...

  9. Nginx学习——Nginx启动、停止、重启和信号控制以及平滑升级

    1.Nginx 启动与停止 (1)启动方式 启动格式:Nginx可执行文件地址 -c Nginx配置文件地址 /etc/local/nginx/sbin/nginx -c /root/dufy/ngi ...

随机推荐

  1. 小程序已成为超级APP必选项,逐鹿私域“留量”

    截止2021年底,中国移动互联网月活跃用规模达到11.74亿人,增速逐渐呈放缓趋势,用户渗透率接近天花板.客户的增长速度越趋于平缓,品牌在不同成长阶段也要适应增长节奏的变化,越来越多主流商家不得不利用 ...

  2. Firefox 国外换为国内同步的服务器地址

    地址栏键入 about:config点击 接受风险并同意查找 identity把右侧字符串包含 firefox.com 替换为 firefox.com.cn 即换为国内同步服务器反之把 firefox ...

  3. 技术分享 | SeleniumIDE用例录制

    1.录制回放方式的稳定性和可靠性有限 2.只支持 Firefox.Chrome 3.对于复杂的页面逻辑其处理能力有限 环境准备 Chrome 插件:https://chrome.google.com/ ...

  4. Mybaitis入门基础(一)MyBatis的概念引入及工作原理

    阅读目录 一:对原生态JDBC问题的总结 二:MyBatis框架 三:mybatis入门程序 四:mybatis和Hibernate的本质区别与应用场景 五:小结 一:框架前言的那些事 良将难求 胜铁 ...

  5. ABP应用开发(Step by Step)-下篇

    测试 ProductAppService 类 启动模板附带测试基础架构,包括xUnit.Shouldly和NSubstitute库.它使用SQLite 内存数据库来模拟数据库,并为每个测试创建一个单独 ...

  6. Java继承实例解析

    Java继承 前言 继承是面向对象语法的三大特征之一.继承可以降低代码编写的冗余度,提高编程的效率.通过继承,子类获得了父类的成员变量和方法.一个子类如何继承父类的字段和方法,如何修改从父类继承过来的 ...

  7. SSH 证书登录教程

    开源Linux 专注分享开源技术知识 SSH 是服务器登录工具,提供密码登录和密钥登录. 但是,SSH 还有第三种登录方法,那就是证书登录.很多情况下,它是更合理.更安全的登录方法,本文就介绍这种登录 ...

  8. 服务器上详细前后端分离项目搭建(springboot+vue)

    介绍:本文用的经典的前后端分离开源项目ruoyi Gitee链接地址:https://gitee.com/y_project/RuoYi 一.拉取项目: 利用Git把项目拉取到本地,也可以直接利用id ...

  9. Java synchronized那点事

    前言 请看上篇:Java 对象头那点事 文章中的源码都有不同程度缩减,来源于openjdk8的开源代码(tag:jdk8-b120). 锁粗化过程 偏向锁 ①:markword中保存的线程ID是自己且 ...

  10. CentOS6安装PLEX

    CentOS6安装PLEX 一.安装使用PLEX 1.1 安装 1)下载 https://www.plex.tv/downloads/ plexmediaserver-1.11.3.4803-c40b ...