HM-SpringCloud微服务系列11.3【实现多级缓存】

1. 安装OpenResty

1.1 OpenResty介绍

OpenResty® 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点:

  • 具备Nginx的完整功能
  • 基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块
  • 允许使用Lua自定义业务逻辑自定义库

官方网站: https://openresty.org/cn/
image

1.2 centos7安装OpenResty

https://www.cnblogs.com/yppah/p/16215261.html

2. OpenResty快速入门[案例]

项目https://www.cnblogs.com/yppah/p/16212294.html
image
image

image
image
image

2.1 反向代理流程

现在,商品详情页使用的是假的商品数据。不过在浏览器中,可以看到页面有发起ajax请求查询真实商品数据。
这个请求如下:
image-20220502210520942
请求地址是localhost,端口是80,就被windows上安装的Nginx服务给接收到了。然后代理给了OpenResty集群:
image-20220502210541348
我们需要在OpenResty中编写业务,查询商品数据并返回到浏览器。
但是这次,我们先在OpenResty接收请求,返回假的商品数据。

2.2 OpenResty监听请求

OpenResty的很多功能都依赖于其目录下的Lua库,需要在nginx.conf中指定依赖库的目录,并导入依赖:

  1. 添加对OpenResty的Lua模块的加载

    修改/usr/local/openresty/nginx/conf/nginx.conf文件,在其中的http下面,添加下面代码:

    #lua 模块
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";
    #c模块     
    lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  
    
  2. 监听/api/item路径

    修改/usr/local/openresty/nginx/conf/nginx.conf文件,在nginx.conf的server下面,添加对/api/item这个路径的监听:

    location  /api/item {
        # 默认的响应类型
        default_type application/json;
        # 响应结果由lua/item.lua文件来决定
        content_by_lua_file lua/item.lua;
    }
    

    这个监听,就类似于SpringMVC中的@GetMapping("/api/item")做路径映射。

    content_by_lua_file lua/item.lua则相当于调用item.lua这个文件,执行其中的业务,把结果返回给用户。相当于java中调用service。

    image-20220502211915364

2.3 编写item.lua

  1. /usr/loca/openresty/nginx目录创建文件夹:lua

    image-20220502212120507

  2. /usr/loca/openresty/nginx/lua文件夹下,新建文件:item.lua

    image-20220502212224190

  3. 编写item.lua,返回假数据

    item.lua中,利用ngx.say()函数返回数据到Response中

    image-20220502214549535

    拷贝原有的假数据,然后稍作修改

    ngx.say('{"id":10001,"name":"test","title":"33寸行李箱 820.70.36.4","price":29900,"stock":2999,"sold":31290}')
    

    image-20220503150448550

  4. 重新加载配置(本地主机远程服务器/虚拟机 的nginx都要重启)

    nginx -s reload
    

    image-20220502212722858

    image-20220503150410720

    image

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

    image-20220503150531182

    当前,本地页面项目nginx配置中的业务集群地址实际上就是OpenResty地址
    image-20220502213904760

3. 应用一:请求参数处理

在OpenResty接收前端请求,但是返回的是假数据。
要返回真实数据,必须根据前端传递来的商品id,查询商品信息才可以。
那么如何获取前端传递的商品参数呢?

3.1 获取参数的API

OpenResty中提供了一些API用来获取不同类型的前端请求参数:
image

3.2 获取参数并返回[案例]

image
在前端发起的ajax请求如上图,可以看到商品id是以路径占位符方式传递的,因此可以利用正则表达式匹配的方式来获取ID。

3.2.1 获取商品id

修改/usr/loca/openresty/nginx/nginx.conf文件中监听/api/item的代码,利用正则表达式获取ID:

location ~ /api/item/(\d+) {
    # 默认的响应类型
    default_type application/json;
    # 响应结果由lua/item.lua文件来决定
    content_by_lua_file lua/item.lua;
}

image

3.2.2 拼接ID并返回

修改/usr/loca/openresty/nginx/lua/item.lua文件,获取id并拼接到结果中返回:

-- 获取路径参数
local id = ngx.var[1]
-- 返回结果
ngx.say('{"id":' .. id .. ',"name":"test","title":"33寸行李箱 820.70.36.4","price":29900,"stock":2999,"sold":31290}')

image

3.2.3 重新加载并测试

运行命令以重新加载OpenResty配置:

nginx -s reload

image

此处仅reload虚拟机中的nginx(OpenResty)即可

刷新页面可以看到结果中已经带上了ID(动态):
image
image

4. 应用二:查询Tomcat

https://www.cnblogs.com/yppah/p/16219583.html

5. 应用三:Redis缓存预热

https://www.cnblogs.com/yppah/p/16226257.html

6. 应用四:查询Redis缓存

https://www.cnblogs.com/yppah/p/16226273.html

7. 应用五:Nginx本地缓存

https://www.cnblogs.com/yppah/p/16226284.html

posted @   yub4by  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示