请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

四、实现多级缓存

多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。

4. 查询Tomcat

Apache Tomcat是一个流行的开源Java Web应用服务器。
它实现了几个Java EE规范,包括Java Servlet、Java Server Pages (JSP)、Java Expression Language和JavaWebSocket等,并且Tomcat的连接器组件实现了HTTP请求的解析,因此可以将Tomcat看作是一个HTTP服务器。

Tomcat有5个主要的功能,分别是:接收和反馈外部请求的连接器、负责处理请求的容器、管理servlet应用的生命周期、把客户端请求的url映射到对应的servlet、与Servlet程序合作处理HTTP请求。

除此之外,Tomcat还有其他的优点,比如:Tomcat是开源的,并且是由Apache软件基金会开发的;Tomcat是由Java语言实现的,因此需要运行在Java虚拟机上;Tomcat实现了几个Java EE规范,因此可以运行自己编写的Servlet应用程序处理动态请求,即实现动态页面。

3)实现商品查询

最后,我们修改/usr/local/openresty/lua/item.lua文件,利用刚刚封装的函数库实现对tomcat的查询:
注释掉之前的代码

-- 引入自定义common工具模块,返回值是common中返回的 _M
local common = require("common")
-- 从 common中获取read_http这个函数
local read_http = common.read_http
-- 获取路径参数
local id = ngx.var[1]
-- 根据id查询商品
local itemJSON = read_http("/item/".. id, nil)
-- 根据id查询商品库存
local stockJSON = read_http("/item/stock/".. id, nil)

测试:
在item.lua中添加返回值:

ngx.say(itemJSON)

在这里插入图片描述

重启nginx:

nginx -s reload

访问:
http://localhost/item.html?id=10001

结果:
sold和stock为null,这两个都是库存表中的数据,说明两个表未拼接
在这里插入图片描述

  1. CJSON工具类

OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。

官方地址: https://github.com/openresty/lua-cjson/

语法格式:

-- 引入cjson模块:
local cjson = require "cjson"
-- 序列化
local json = cjson.encode(obj)
-- 反序列化:
local obj = cjson.decode(json);
  1. 实现Tomcat查询

下面,我们修改之前的item.lua中的业务,添加json处理功能:

-- 导入common函数库
local common = require('common')
local read_http = common.read_http
-- 导入cjson库
local cjson = require('cjson')

-- 获取路径参数
local id = ngx.var[1]
-- 根据id查询商品
local itemJSON = read_http("/item/".. id, nil)
-- 根据id查询商品库存
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

-- 把item序列化为json 返回结果
ngx.say(cjson.encode(item))

测试:
重启nginx:

nginx -s reload

访问:
http://localhost/item.html?id=10001
结果:
sold和stock都有数值了
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐