微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
多级缓存
文章目录
- 微服务框架
- 多级缓存
- 48 多级缓存
- 48.4 查询Tomcat【环境准备】
- 48.4.1 多级缓存需求
48 多级缓存
48.4 查询Tomcat【环境准备】
48.4.1 多级缓存需求
之前我们已经拿到 了请求参数,现在肯定就要去获取数据了
目前我们已经准备好了Nginx 的反向代理服务器
就是在我们windows 本地跑的Nginx 服务,
让它去接收前端的请求,并转到我们部署在Linux 服务器上的OpenResty
服务端也准备好了,并且还加上 了进程缓存
现在的问题,Linux 上的服务器拿到数据后,从哪儿查,现在我们的数据库是在服务器上
按流程图看,应该先查Redis 缓存,缓存没有再查Tomcat 进程缓存 ,Tomcat 进程缓存也没有,再通过接口去访问数据库拿数据
现在Redis 缓存的数据又从何而来,现在还没做,就算做了 也应该是查完Tomcat 再把数据放到Redis 中
现在我们先跳过Redis 缓存这一步
我们先实现OpenResty对 Tomcat 的查询
【G 了,我的是真的服务器,我试试 ping 一下】
我干了,肯定ping 不通啊【Windows 绝对有防火墙】
【不会真要做内网穿透 吧,知识盲区…】【让我想想】
好像吧,我可以把项目打包,传到Linux 服务器上跑起来,这样就在同一个服务器上 了
试试吧
通过yum 快速整个java 1.8 的环境
yum install java-1.8.0-openjdk.x86_64
OK, 希望我的猜想可以成功
上案例
【案例】获取请求路径中的商品id信息,根据id向Tomcat查询商品信息
这里要修改item.lua,满足下面的需求:
-
获取请求参数中的id
-
根据id向Tomcat服务发送请求,查询商品信息
-
根据id向Tomcat服务发送请求,查询库存信息
-
组装商品信息、库存信息,序列化为JSON格式并返回
【nginx内部发送Http请求】
nginx提供了内部API用以发送http请求:
返回的响应内容包括:
- resp.status:响应状态码
- resp.header:响应头,是一个table
- resp.body:响应体,就是响应数据
注意:这里的path是路径,并不包含IP和端口。这个请求会被nginx内部的server监听并处理。
但是我们希望这个请求发送到Tomcat服务器,所以还需要编写一个server来对这个路径做反向代理:
笔者再试试把Windows 防火墙关掉,看看能不能ping 上
算了算了,我直接打包上传到服务器
我先试试
改一下端口
Linux 本地测试
OK,没问题【我真是个叼毛】
先试试,不行再想办法
【封装http查询的函数】
我们可以把http查询的请求封装为一个函数,放到OpenResty函数库中,方便后期使用。
- 在/usr/local/openresty/lualib目录下创建common.lua文件:
- 在common.lua中封装http查询的函数
-- 封装函数,发送http请求,并解析响应
local function read_http(path, params)
local resp = ngx.location.capture(path,{
method = ngx.HTTP_GET,
args = params,
})
if not resp then
-- 记录错误信息,返回404
ngx.log(ngx.ERR, "http not found, path: ", path , ", args: ", args)
ngx.exit(404)
end
return resp.body
end
-- 将方法导出
local _M = {
read_http = read_http
}
return _M
OK, 改成中文
OK