SpringCloud-高级篇(十六)

前面学习了Lua的语法,就可以在nginx去做编程,去实现nginx类里面的业务,查询Redis,查询tomcat等 ,业务逻辑的编写依赖于其他组件,这些组件会用到OpenResty的工具去实现

SpringCloud-高级篇(十六)_第1张图片

(1)安装OpenResty

SpringCloud-高级篇(十六)_第2张图片

SpringCloud-高级篇(十六)_第3张图片

SpringCloud-高级篇(十六)_第4张图片

SpringCloud-高级篇(十六)_第5张图片

SpringCloud-高级篇(十六)_第6张图片

SpringCloud-高级篇(十六)_第7张图片

SpringCloud-高级篇(十六)_第8张图片

SpringCloud-高级篇(十六)_第9张图片

SpringCloud-高级篇(十六)_第10张图片

lualib、luajit是lua提供的第三方模块,比如说我们操作Redis,操作Mysql这些工具模块都封装到了lualib里面了,所以只要集成了lualib里面的插件,就能实现这些功能了

SpringCloud-高级篇(十六)_第11张图片

openresty是个软连接,启动的其实是nginx本身

SpringCloud-高级篇(十六)_第12张图片

配置了环境变量,之后就可以在任意的目录下启动nginx 

SpringCloud-高级篇(十六)_第13张图片

SpringCloud-高级篇(十六)_第14张图片

SpringCloud-高级篇(十六)_第15张图片

 SpringCloud-高级篇(十六)_第16张图片

启动nginx:

SpringCloud-高级篇(十六)_第17张图片

配置文件配置的端口是8081 :启动页面跟nginx很像

SpringCloud-高级篇(十六)_第18张图片

(2)OpenResty快速入门

在openResty里面编写业务Redis查询,tomcat查询等等

SpringCloud-高级篇(十六)_第19张图片

SpringCloud-高级篇(十六)_第20张图片

商品详情页的数据是查询服务端获取数据

SpringCloud-高级篇(十六)_第21张图片

现在请求报错了,页面渲染的是假数据, 

SpringCloud-高级篇(十六)_第22张图片

这个请求被Windows的版本的nginx接收,然后反向代理到OpenRestry去处理业务 

SpringCloud-高级篇(十六)_第23张图片

SpringCloud-高级篇(十六)_第24张图片

下面需要在OpenResty去接收这个请求:

SpringCloud-高级篇(十六)_第25张图片

修改 OpenResty下的nginx配置文件

SpringCloud-高级篇(十六)_第26张图片

item.lua是在nginx下面去找的:创建这个目录文件:

SpringCloud-高级篇(十六)_第27张图片

我们这里先返回假数据,先不查询:

ngx.say相当于java中的response.println()

SpringCloud-高级篇(十六)_第28张图片

SpringCloud-高级篇(十六)_第29张图片

更改数据:SpringCloud-高级篇(十六)_第30张图片

重新加载nginx:

刷新页面:数据发生改变,请求成功了,是有openResty返回的数据SpringCloud-高级篇(十六)_第31张图片

(3)OpenResty请求参数处理

怎么在openResty中获取用户的请求参数呢

SpringCloud-高级篇(十六)_第32张图片

SpringCloud-高级篇(十六)_第33张图片

修改nginx配置文件文件:

SpringCloud-高级篇(十六)_第34张图片

SpringCloud-高级篇(十六)_第35张图片

修改lua文件:

SpringCloud-高级篇(十六)_第36张图片

SpringCloud-高级篇(十六)_第37张图片

SpringCloud-高级篇(十六)_第38张图片

(4)查询tomcat

获取到请求参数之后,是要查询数据的         

openresty是先查缓存,缓存中的数据从而而来是tomcat,我们这里先实现查询tomcat,先不查询缓存,把查询到的数据放到缓存中去

SpringCloud-高级篇(十六)_第39张图片

tomcat是Windows的地址,openResty是虚拟机的地址,发送请求的时候一定要找到正确的地址,有一个便捷的方式 ,使用关于所有的虚拟机,那就是把虚拟机的ip最好以为变为1,就能找到Windows的地址,前提是防火墙得关闭

SpringCloud-高级篇(十六)_第40张图片

SpringCloud-高级篇(十六)_第41张图片

SpringCloud-高级篇(十六)_第42张图片

tomcat接收的请求以item开头:SpringCloud-高级篇(十六)_第43张图片

nginx配置添加:

SpringCloud-高级篇(十六)_第44张图片

SpringCloud-高级篇(十六)_第45张图片

openResty会读取这个路径下的lua文件 

SpringCloud-高级篇(十六)_第46张图片

在上面的路径下创建lua文件 

SpringCloud-高级篇(十六)_第47张图片

新建:

SpringCloud-高级篇(十六)_第48张图片

SpringCloud-高级篇(十六)_第49张图片

现在返回的数据,不在是假数据,而是查询的数据

修改nginx/lua下的item.lua配置文件:

SpringCloud-高级篇(十六)_第50张图片

SpringCloud-高级篇(十六)_第51张图片

SpringCloud-高级篇(十六)_第52张图片先只返回商品信息,不返回库存信息 

重新加载nginx:

然后查询页面:就能显示数据库中查询的真实数据了

SpringCloud-高级篇(十六)_第53张图片

SpringCloud-高级篇(十六)_第54张图片

返回完整数据,需要用到一个json的工具 

SpringCloud-高级篇(十六)_第55张图片

SpringCloud-高级篇(十六)_第56张图片

SpringCloud-高级篇(十六)_第57张图片 

SpringCloud-高级篇(十六)_第58张图片

(5)tomcat集群负载均衡

上面实现了从openResty向tomcat发送一个http请求,查询商品信息,返回页面,实现渲染,上面的tomcat只有一台,在实际的生产过程中国tomcat一定是个集群,openResty向tomcat发送请求的时候必须对多台tomcat实现负载均衡请求

SpringCloud-高级篇(十六)_第59张图片

8081去查询数据库,会形成一个JVM的进程缓存,缓存到8081的tomcat服务器上,下一次再来查8081就可以直接读取缓存,不查询数据库,就会提高性能,但是进程缓存是不能共享的8082就没有,tomcat负载均衡的规则默认是轮询,下一次访问必然到8082缓存就没有生效,除非把每台tomcat都查询缓存一遍,冗余的查询,冗余的保存,占用额外空间,命中率低

我想要1001商品第一次查询完,永远都由缓存,就需要把1001的查询每次都指定到同一台tomcat,才能保证缓存才能生效

1002的商品才会查询下一台tomcat

不同商品访问不一样的服务器,也可以一样,但是同一个商品一定访问同一台服务器,这样才能保证缓存永远命中,JVM进程缓存才有意义,轮询是做不到的,修改nginx负载均衡的算法

hash,通过hash对路径取余,只要路径不变,请求的tomcat就是同一台tomcat

SpringCloud-高级篇(十六)_第60张图片

修改nginx的配置文件:

SpringCloud-高级篇(十六)_第61张图片

重启nginx 

在启动一台tomcat:SpringCloud-高级篇(十六)_第62张图片

SpringCloud-高级篇(十六)_第63张图片

页面访问一下:SpringCloud-高级篇(十六)_第64张图片

算法负载均衡到:8082

SpringCloud-高级篇(十六)_第65张图片

SpringCloud-高级篇(十六)_第66张图片

清空日志,在刷新一遍页面,8082有缓存,就不需要在查了:日志没有打印

SpringCloud-高级篇(十六)_第67张图片

换一个id=1002:

SpringCloud-高级篇(十六)_第68张图片

负载均衡到8081了:

SpringCloud-高级篇(十六)_第69张图片

8082没有日志 

SpringCloud-高级篇(十六)_第70张图片

你可能感兴趣的:(spring,cloud,java,spring)