SpringCloud-高级篇(十六)

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

(1)安装OpenResty

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

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

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

 

启动nginx:

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

(2)OpenResty快速入门

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

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

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

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

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

修改 OpenResty下的nginx配置文件

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

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

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

更改数据:

重新加载nginx:

刷新页面:数据发生改变,请求成功了,是有openResty返回的数据

(3)OpenResty请求参数处理

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

修改nginx配置文件文件:

修改lua文件:

(4)查询tomcat

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

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

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

tomcat接收的请求以item开头:

nginx配置添加:

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

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

新建:

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

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

先只返回商品信息,不返回库存信息 

重新加载nginx:

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

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

 

(5)tomcat集群负载均衡

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

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

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

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

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

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

修改nginx的配置文件:

重启nginx 

在启动一台tomcat:

页面访问一下:

算法负载均衡到:8082

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

换一个id=1002:

负载均衡到8081了:

8082没有日志 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++(16)——vector的模拟实现

前面的文章中,给出了对于的模拟实现,本篇文章将给出关于的模拟实现。 目录 1.基本框架: 2. 返回值与迭代器: 2.1 返回值capacity与size: 2.2 两种迭代器iterator和const_iterator: 3. 扩容与push_back与pop_back&#xff1a…

后端学习:数据库MySQL学习

数据库简介 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。   接下来,我们来学习Mysql的数据模型,数据库是如何来存储和管理数据的。在介绍 Mysql的数据模型之前,需要先了解一个概念&#xf…

log4j2 配置入门介绍

配置 将日志请求插入到应用程序代码中需要进行大量的计划和工作。 观察表明,大约4%的代码专门用于日志记录。因此,即使是中等规模的应用程序也会在其代码中嵌入数千条日志记录语句。 考虑到它们的数量,必须管理这些日志语句,而…

【QT+QGIS跨平台编译】之十三:【giflib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、giflib介绍二、文件下载三、文件分析四、pro文件五、编译实践一、giflib介绍 GIFlib(又称为Libgif)是一个开源的C语言库,用于处理GIF图像格式。它提供了一组函数和工具,使得开发者可以读取、写入和操作GIF图像文件。 GIFlib支持GIF87a和GIF89a两种版本的GIF格…

【项目管理】CMMI-管理性能与度量

管理性能与度量 (Managing Performance and Measurement, MPM)的目的在于开发和维持度量能力来管理开发过程性能,以实现公司业务目标,更直接来说,将管理和改进工作集中在成本、进度表和质量性能上,最大限度地提高业务投资回报。 1…

linux(进程概念)

目录 前言: 正文 冯诺依曼体系结构 操作系统 (Operator System) 概念 目的 定位 如何理解“管理” 进程组织 基本概念 内核数据结构 代码和数据 查看进程 ps指令 top指令 父子进程 fork创建进程 小结: 前…

【Redis】Redis有哪些适合的场景

🍎个人博客:个人主页 🏆个人专栏:Redis ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 (1)会话缓存(Session Cache) (2)全页缓存(FPC…

深入理解TCP网络协议(1)

目录 1.TCP协议的段格式 2.TCP原理 2.1确认应答 2.2超时重传 3.三次握手(重点) 4.四次挥手 1.TCP协议的段格式 我们先来观察一下TCP协议的段格式图解: 源/目的端口号:标识数据从哪个进程来,到哪个进程去 32位序号/32位确认号:TCP会话的每一端都包含一个32位&#xff08…

Windows 7 x64 SP1 安装 Google Chrome 109.0.5414.120 (正式版本) (64 位)

1 使用 IE 浏览器 输入网址 Google Chrome 网络浏览器得益于 Google 智能工具,Chrome 现在更易用、更安全、更快速。https://www.google.cn/chrome/,点击下载 Chrome。 2 点击 接受并安装。 3 提示。 4 保存。 5 双击 运行 ChromeSetup.exe。 6 等待安…

9.异步爬虫

异步爬虫可以理解为非只单线程爬虫 我们下面做个例子,之前我们通过单线程爬取过梨视频 https://blog.csdn.net/potato123232/article/details/135672504 在保存视频的时候会慢一些,为了提升效率,我们使用异步爬虫爬取 目录 1 线程池 2 …

类和对象 第五部分第三小节:递增运算符重载

作用&#xff1a;通过重载递增运算符&#xff0c;实现自己的整型数据递增 代码案例 1.重载前置运算符 #include <iostream> #include <string> using namespace std;class MyInteger {friend ostream& operator<<(ostream& out, const MyInteger&…

简盒工具箱iapp源码

一款工具箱兼做软件库。 新增远程更新功能 修复了部分失效功能 修复了偶尔会卡在启动页的情况 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88776737 更多资源下载&#xff1a;关注我。

Open CASCADE学习|读取STEP文件并显示

STEP文件是基于ISO 10303标准创建的三维模型数据交换文件&#xff0c;也称为产品模型数据交换标准&#xff08;Standard Exchange of Product data model&#xff09;。这种文件格式旨在提供一个不依赖具体系统的中性机制&#xff0c;实现产品数据的交换和共享。 STEP文件是一…

C#实现带光标的截图

1&#xff0c;目的&#xff1a; 可通过热键实现带光标与不带光标两种模式的截图。 2&#xff0c;知识点&#xff1a; 快捷键的注册与注销。 [DllImport("user32.dll", SetLastError true)] public static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyMo…

【算法与数据结构】139、LeetCode单词拆分

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以看做一个动态规划问题。其中&#xff0c;字符串s是背包&#xff0c;而字典中的单词就是物品。…

Dubbo框架注册中心-Zookeeper搭建

Dubbo 是阿里巴巴公司开源的高性能、轻量级的Java RPC框架&#xff0c;致力于提供高性能。 Dubbo官网 本篇开始dubbo的第一篇&#xff0c;注册中心 ZooKeeper 环境搭建。 环境前置&#xff1a;由于Zookeeper是基于Java环境&#xff0c;必须安装有JDK。查看命令 java -version。…

服务端开发小记01——Tomcat

Tomcat Tomcat简介Tomcat在Linux下的安装Tomcat验证Tomcat常用命令&#xff08;Linux下&#xff09; Tomcat简介 Tomcat是一个Web容器&#xff0c;JavaEE程序可以在此运行。Tomcat是一个中间件&#xff0c;在B/S架构中&#xff0c;浏览器发出的http请求经过tpmcat中间件&#…

降压模块LM2596S的操作使用

一、技术参数 二、使用说明 1.引脚说明&#xff1a; IN输入正极 IN-输入负极 OUT输出正极 OUT-输出负极 2.输入电压范围&#xff1a;直流3.2V 至 46V (输入的电压必须比要输出的电压高1.5V以上。不能升压) 3.输出电压范围&#xff1a;直流 1.25V至 35V 电压连续可调&#…

SBDD的节点选择(Node selection)和树的扩展(Tree expansion)的操作是怎么进行的?

Node selection: 1&#xff09;选择规则&#xff1a; “focus atom”是从生成的原子中选出的&#xff0c;如果一个原子没有“capped”&#xff0c;那么它就可以被选为“focus atom”。 一个原子被“capped”是因为它的化合价约束&#xff08;valency constraint&#xff09;…

内网安全:NTLM-Relay

目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动&#xff1a;NTLM中继攻击 攻击条件 实战一&#xff1a;NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…