微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
多级缓存
48 多级缓存
48.5 查询Tomcat【实现查询】
48.5.1 使用Http函数查询数据
我们刚才已经把http查询的请求封装为一个函数,放到OpenResty函数库中,接下来就可以使用这个库了。
【当前的item.lua 返回的是假数据】
现在我们要来真的了
local common = require('common')
local read_http = common.read_http
local id = ngx.var[1]
local itemJSON = read_http("/item/" .. id,nil)
local stockJSON = read_http("/item/stock/" .. id , nil)
ngx.say(itemJSON)
现在暂时不封装,看看效果
重新加载Nginx 服务
现在直接测试一下
我踏马真的会哭,一次成功
再试试10003
响应数据
没毛病,这说明我把Tomcat 服务跑到Linux 服务器上一点问题都没有,而且我自己的写路径也写对了
告诉大家一个方法,我发的这条弹幕
查询到的是商品、库存的json格式数据,我们需要将两部分数据组装,需要用到JSON处理函数库。
【需要转为对象】
JSON结果处理
OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。
官方地址: https://github.com/openresty/lua-cjson/
其实现在 的lualib 中就有这个东西
-- 导入common 函数库
local common = require('common')
local read_http = common.read_http
-- 导入cjson 库
local cjson = require('cjson')
-- 获取路径参数
local id = ngx.var[1]
-- 查询商品信息
local itemJSON = read_http("/item/" .. id,nil)
-- 查询库存信息
local stockJSON = read_http("/item/stock/" .. id , nil)
-- JSON 转化为lua 的table
local item = cjson.decode(itemJSON)
local stock = cjson.decode(stockJSON)
-- 组合数据
item.stock = stock.stock
item.sold = stock.sold
-- -- 返回结果
-- ngx.say(itemJSON)
-- 把item 序列化为json,返回结果
ngx.say(cjson.encode(item))
OK,重新加载
再试一次
浏览器访问,查看返回数据
牛逼!!!!!!!!!!!!!!!
一次成功
这就实现了 OpenResty 对Tomcat 的直接查询