1.续 配置中心

上次课我们完成了cart模块的数据库配置信息添加到nacos的操作

我们也删除了cart模块原有的连接数据库信息的配置

下面开始,我们尝试连接nacos配置中心,读取数据库配置信息,令cart模块仍然能够正常连接数据库

1.1项目读取配置

csmall-cart-webapi模块要读取连接数据库的配置

如果要读取配置中心的信息,首先要添加依赖

<!--   Nacos配置中心的依赖  -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--  支持SpringCloud加载系统配置的依赖  -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

如果当前我们使用的SpringCloud版本不是2020.x

那么上面添加的依赖会有不一样的情况,要想去了解就要查阅相关资料

像其他程序一样,在添加完依赖之后,还需要添加yml文件的配置

借此机会讲解一下SpringCloud项目的配置文件加载顺序

我们学习过的配置文件大体有application.properties和application.yml两种配置文件添加配置

这两个文件如果同时存在,他们的配置都可以同时生效

但是如果两个文件配置有冲突(对同一个属性配置两次)

那么就要看加载顺序了

  • 先加载application.yml

  • 后加载application.properties

如果两个配置文件同时设置了同一个属性,后加载的覆盖掉先加载的

在添加上面的pom文件依赖之后,SpringCloud项目就又多了一组配置文件

它们是bootstrap.yml和bootstrap.properties

这组配置文件是SpringCloud项目才能使用的

它的作用是实际开发时,主要配置系统内容,一般都是不轻易修改的

所以这组配置文件的加载时机,整体早于application这一组

一个SpringCloud项目加载配置文件的顺序最终可能如下图

因为配置文件的特性,bootstrap这一组是加载系统配置的

所以我们读取配置中心的配置信息,最好添加在bootstrap.yml\properties中

下面我们就在cart-webapi项目中resources文件夹中添加bootstarp.yml文件

spring:cloud:nacos:config:# 指定配置中心的配置server-addr: localhost:8848# 命名空间模式就是public,可以省略# 下面配置groupgroup: DEFAULT_GROUP# SpringCloud项目,加载配置信息的规则# 默认情况下,会自动读取配置中心里,如下格式的配置信息[服务名称].[后缀名称]# 服务名称nacos-cart,后缀名下面配置的yamlfile-extension: yaml# 所以最终读取public命名空间中,DEFAULT_GROUP组下的nacos-cart.yaml

如果一切顺利,那么cart模块是可以通过knife4j测试操作连接数据库的

我们可以新增购物车信息,或删除购物车信息后检查数据库是否有对应操作

因为我们已经删除了本地yml文件中数据库的配置,所以,它能连接操作数据库一定是配置中心生效了!

1.2RestTemplate远程调用

我们现在项目中使用的RPC远程调用技术是Dubbo

实际上除了Dubbo技术之外,还有很多远程调用的方法

它们有些调用的思想都和Dubbo完全不同

Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架

但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方法不是java编写的,那么Dubbo就无能为力了

我们可以使用RestTemplate来调用任何语言编写的公开的Rest路径

也就是只要能够使用浏览器访问的路径,我们都可以使用RestTemplate发送请求,接收响应

使用步骤如下

步骤1:

无需添加任何pom依赖和yml文件配置

只需在调用的发起方,也就是使用RestTemplate发起请求的项目配置文件中(指支持@Configuration注解的类或SpringBoot启动类),向Spring容器注入一个该类型对象

所有SpringBoot配置类都可以添加下面代码,我们选择SpringBoot启动类添加如下代码

在CartWebapi启动类中修改

@SpringBootApplication
//  略....
public class CsmallCartWebapiApplication {public static void main(String[] args) {SpringApplication.run(CsmallCartWebapiApplication.class, args);}@Bean// 启动负载均衡的注解,因为Dubbo直接负载均衡,RestTemplate能够代替Dubbo的功能,所以也要负载均衡@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

步骤2:

RestTemplate是一个能够发送请求到指定url路径的工具

我们项目中有若干控制器方法,都可以作为它调用的目标

我们可以实现在cart模块运行删除购物车商品的同时减少库存

这样就要求我们stock模块具备一个能够减少库存的控制器方法,

现在这个方法是有的,url为:/base/stock/reduce/count

但是RestTemplate调用时请求以get方法居多,post方法调用代码比较繁琐,所以将现在stock模块减少库存的方法由之前的@PostMapping修改为@GetMapping

@GetMapping("/reduce/count")

步骤3:

回到cart-webapi模块

开始调用

我们可以在当前CartController控制器方法deleteUserCart中

添加RestTemplate的调用,实现库存的减少

// 装配执行RestTemplate调用的对象
@Autowired
private RestTemplate restTemplate;@PostMapping("/delete")
@ApiOperation("删除购物车商品")
@ApiImplicitParams({@ApiImplicitParam(value = "用户ID",name="userId",example = "UU100"),@ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100")
})
public JsonResult deleteUserCart(String userId,String commodityCode){// 下面准备调用stock模块减少库存的方法// 使用RestTemplate首先要确定调用的路径String url="http://localhost:20003/base/stock/reduce/count?" +"commodityCode={1}&reduceCount={2}";// restTemplate对象发起调用// getForObject方法参数解释// 第一个参数就是请求的url路径// 第二个参数就是访问目标方法的返回值类型的反射,他决定了返回值的类型// 第三个参数开始,是向url中占位符赋值的参数,{1}的位置 被第三个参数赋值,{2}被第四个参数赋值,以此类推JsonResult jsonResult=restTemplate.getForObject(url,JsonResult.class,commodityCode,5);System.out.println("rest调用完毕,返回值:"+jsonResult);// 原有的删除购物车的方法(未更改)cartService.deleteUserCart(userId,commodityCode);return JsonResult.ok("删除购物车商品完成!");
}

步骤4:

发送测试

将相关的模块都启动

Nacos\Seata

cart\stock

调用cart模块删除购物车中的方法

运行后检查对应商品减少库存和购物车中数据的删除效果

如果一切正常证明调用成功了

SpringCloudNetflix系统下,RestTemplate实现有一个别名叫Ribbon

如果说"Ribbon"调用,指的就是RestTemplate对象的调用过程

1.3什么是web服务器

简单来说

Web服务器就是一个能够接收http请求并作出响应的程序

webServer项目(二阶段项目)就是一个我们手写的Web服务器

我们现在开发的标准SpringBoot项目启动时内置的Web服务器叫Tomcat

实际上我们业界中还有很多Web服务器,它们具备很多不同的特征

网关Gateway项目使用Netty服务器,Netty服务器内部是NIO的所以性能更好

下图以Tomcat为例,解释请求响应流程

大多数情况我们会使用Tomcat作为Web服务器

它是我们请求\响应流程中的核心组件

Tomcat是也有缺点

常规情况下,一个tomcat并发数在100多一点

一般情况下,一个网站要1000人在线,并发数是2%~5% 也就是20~50并发

如果需要一个支持更高并发的服务器,就是需要使用Nginx

2.Nginx

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

2.1Nginx的优势

  1. 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5万/秒
  2. 反向代理性能非常强。(可用于负载均衡)
  3. 内存和 cpu 占用率低。(为 Apache(也是一个服务器) 的 1/5-1/10)

又小又快

Nginx快速的原因

常见面试题:Nginx为什么快

Nginx使用NIO来实现,是它能快速的主要原因之一

从Nginx内部的结构和运行流程上讲,它内部是一个主进程(Master)多个工作进程(Worker)

Master负责统筹管理配置和Worker的分工

Worker来负责处理请求,作出响应

而且使用非阻塞式的,异步的来完成工作

简单来说,就是一个Worker接到一个请求后,对请求进行处理,处理后在响应返回前,这个Worker还会处理别的请求,直到请求返回响应时,才会处理响应,也就是Worker这个进程全程无阻塞

2.2正向代理

要想了解反向代理,首先了解正向代理

正向代理,当我们访问的目标服务器无法连通时,可以借助代理服务器,间接访问该目标服务器

关系类似于生活中的介绍人

2.3反向代理

而反向代理的模式为下图

请求反向代理服务器的特点是,我们请求的是代理服务器的地址,真正提供服务的服务器地址我们不需要知道,这样做的好处是反向代理服务器后可能是一个集群,方便负载均衡

有点类似于生活中的代理人(中介),有什么事情直接找这个人就能完成需求,它怎么完成的我们不用管

2.4Nginx的使用

实际开发中,Nginx可以用于反向代理服务器,

实际处理请求的是Tomcat服务器

因为Nginx优秀的静态内容并发性能

我们常常使用它做静态资源服务器

在Nginx中保存图片,文件视频等静态资源

经常和FastDFS组合使用

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

2.5Nginx和Gateway的区别

首先明确Nginx和Gateway并不冲突

他们都是统一入口的概念,它们可以同时开启

也可以开启其中一个

只不过Nginx不属于java程序,而Gateway是java程序,而且是微服务的一部分

Nginx是服务器程序我们不可编辑,

Gateway是我们自己创建的项目,依赖和配置都由我们自己完成

最终如果想做反向代理服务器,就使用Nginx

如果是微服务项目的网关就是Gateway

3.Linux部署java项目

3.1启动虚拟机

这部分的操作之前学习虚拟机时已经做过,可以参照之前的笔记即可

推荐大家重新解压纯净版的RockyLinux来实现

启动后登录rockylinux

sudo su -

修改root用户密码

passwd

下面就切换到客户端软件连接虚拟机

ifconfig
ifconfig | more

查看ip地址使用Bvssh软件连接

3.2安装java环境

连接成功后,打开命令行界执行安装java的命令

yum install java

运行过程中出现了y/N的选择,要输入y之后按回车

安装需要时间,等待即可

yum安装好的java会自动配置环境变量

验证安装

java -version

3.3创建java项目

按照创建普通SpringBoot项目的流程创建即可

注意需要勾选 Spring Web依赖

项目创建好之后,在项目的resources目录下static下创建html文件

内容编写完毕

在侧边栏选中maven运行package打包命令

打包成功后找到jar包生成的位置

进入这个位置,找到生成的jar包

将生成的jar包拖入Bvssh软件提供的复制文件的工具中

转到linux命令行

输入ll(两个小写的L)

ll

观察当前目录是否有我们拖入的jar文件

如果存在执行运行jar文件的名

java -jar [jar包名称]

[jar包名称]可以敲前面几个字母,按Tab自动补全

如果顺利启动,会看到Spring的图形Logo

下面关闭防火墙(启动Springboot项目的界面不能关,可以新开一个界面输入命令)

systemctl stop firewalld

然后可以在windows中打开浏览器访问项目

如果你愿意购买云服务器

就可以将当前项目用同样的办法,部署到云服务器中,可以让全世界人访问了

随笔

SpringCloud版本在2019年以前

都是在使用伦敦地铁站站名

后来才改为2020\2021....这样的版本号

我们的网站秒杀时每秒处理数8000

400

酷鲨商城26左右节点(服务器数)

10000

JSD-2204-续 配置中心-Nginx-Linux部署java项目-Day19相关推荐

  1. Linux部署Java项目

    文章目录 一.启动虚拟机 二.安装java环境 三.创建java项目 一.启动虚拟机 使用RockyLinux来实现 启动后登录rockylinux sudo su - 修改root用户密码 pass ...

  2. nginx linux 部署web项目名,Linux部署web项目配置Nginx

    1.先配置java环境  下载   jdk-7u80-linux-x64.rpm 2.下载数据库 mysql  yum 安装 3.下载linux下的tomcat 解压 4.检测tomcat是否安装成功 ...

  3. apollo 配置中心 支持php,apollo配置中心服务端部署

    apollo配置中心服务端部署 木某人 • 2020 年 05 月 07 日 Apollo服务端安装部署 apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象 ...

  4. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)

    记录一次Django部署的文章,不是很熟悉Linux系统,踩了不少坑,本篇文章相当于是一个总结,我会在本文中详细介绍,部署单个Django项目和多个Django的方法,如读者有更好的方法,欢迎留言一起 ...

  5. nginx下部署vue项目概览 - (资源篇)

    相关博客: nginx下部署vue项目概览 这里使用的是百度云的服务器,CentOS7系统的 linux服务器用centos还是ubuntu系统_Linux nginx服务器搭建以及配置 nginx部 ...

  6. linux部署php项目

    linux服务器部署php项目 当我们项目开发完之后,都是放到测试服上面测试,可以跑通之后,再放到正式服上面,正式服都是用linux敲命令,而测试服一般都是用的宝塔,小皮面板之类部署的,这就会有一点差 ...

  7. 【linux部署前端项目】

    linux部署前端项目(本地部署) 1.nginx安装 #在/usr/local/目录下新建nginx目录 sudo mkdir nginx #升级文件权限 sudo chmod 777 mginx ...

  8. nginx怎么部署php项目,nginx怎么正确部署前端项目

    目的: nginx部署打包成为dist的前端项目 (学习视频分享:php视频教程) 相关知识:docker 安装与使用 docker pull nginx docker run --restart=o ...

  9. 在nginx上部署vue项目(history模式);

    在nginx上部署vue项目(history模式): vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想has ...

最新文章

  1. centos6/7安装gitlab
  2. WCF中的REST是什么
  3. [转载] python画柱状图-Python绘制精美图表之双柱形图
  4. java 异常java.lang.UnsupportedOperationException
  5. Map按照key的ASCII码排序
  6. 微信小程序实现视频功能(二):视频列表与下载
  7. Python网络爬虫:空姐网、糗百、xxx结果图与源码
  8. 【LDO带载能力和两端压差有关】
  9. c语言 虚拟时钟 指针,指针式模拟时钟.doc
  10. 一个遮罩层怎么遮罩两个图层_巧妙运用图层做遮罩动画
  11. Nginx 使用 ngx_http_mirror_module 模块 复制 http请求流量
  12. 【转】常用邮箱的 IMAP/POP3/SMTP 设置
  13. 《李航 统计学习方法》学习笔记——第八章提升方法
  14. 学习笔记:UDP实现进程心跳检测
  15. 记一次低级错误:feign.FeignException: status 404 reading XXXClient#XXMethod(Long)
  16. 在Visual Studio 2010/2012/2013/2015上使用C#开发Android/IOS安装包和操作步骤
  17. 精致的动画特效源代码
  18. 密码设置之古诗九键后缀法
  19. matplotlib中ylabel和xlabel函数
  20. 解决configure: WARNING: You will need re2c 0.13.4 or later

热门文章

  1. vue.config.js配置说明
  2. VScode如何快速生成【.vue】文件骨架(配置vue.json)
  3. Java图片抓取2.0
  4. Qt操作Word——在书签处插入表格
  5. 2018北京大兴数字经济论坛-区块链应用创新峰会成功举办
  6. python编程初学指南电子书_Python编程初学者指南书籍和Python零基础快乐学习之旅...
  7. stylus 直转 css
  8. 2022年第七届智能制造机器视觉与自动化展览会
  9. c语言电量百分比程序,C语言实现的百分比加进度条的显示程序
  10. Go语言之log日志