微服务框架

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

多级缓存


文章目录

  • 微服务框架
  • 多级缓存
  • 48 多级缓存
  • 48.4 查询Tomcat【环境准备】
  • 48.4.1 多级缓存需求


48 多级缓存

48.4 查询Tomcat【环境准备】
48.4.1 多级缓存需求

之前我们已经拿到 了请求参数,现在肯定就要去获取数据了

目前我们已经准备好了Nginx 的反向代理服务器

微服务 占内存_缓存

就是在我们windows 本地跑的Nginx 服务,

微服务 占内存_微服务_02

让它去接收前端的请求,并转到我们部署在Linux 服务器上的OpenResty

微服务 占内存_微服务 占内存_03

服务端也准备好了,并且还加上 了进程缓存

微服务 占内存_spring cloud_04

现在的问题,Linux 上的服务器拿到数据后,从哪儿查,现在我们的数据库是在服务器上

微服务 占内存_缓存_05

按流程图看,应该先查Redis 缓存,缓存没有再查Tomcat 进程缓存 ,Tomcat 进程缓存也没有,再通过接口去访问数据库拿数据

现在Redis 缓存的数据又从何而来,现在还没做,就算做了 也应该是查完Tomcat 再把数据放到Redis 中

现在我们先跳过Redis 缓存这一步

微服务 占内存_微服务_06

我们先实现OpenResty对 Tomcat 的查询

微服务 占内存_spring cloud_07

【G 了,我的是真的服务器,我试试 ping 一下】

微服务 占内存_缓存_08

我干了,肯定ping 不通啊【Windows 绝对有防火墙】

【不会真要做内网穿透 吧,知识盲区…】【让我想想】

好像吧,我可以把项目打包,传到Linux 服务器上跑起来,这样就在同一个服务器上 了

试试吧

通过yum 快速整个java 1.8 的环境

yum install java-1.8.0-openjdk.x86_64

微服务 占内存_微服务 占内存_09

微服务 占内存_微服务_10

OK, 希望我的猜想可以成功

上案例

【案例】获取请求路径中的商品id信息,根据id向Tomcat查询商品信息

这里要修改item.lua,满足下面的需求:

  1. 获取请求参数中的id
  2. 根据id向Tomcat服务发送请求,查询商品信息
  3. 根据id向Tomcat服务发送请求,查询库存信息
  4. 组装商品信息、库存信息,序列化为JSON格式并返回

【nginx内部发送Http请求】

nginx提供了内部API用以发送http请求:

微服务 占内存_微服务_11

返回的响应内容包括:

  • resp.status:响应状态码
  • resp.header:响应头,是一个table
  • resp.body:响应体,就是响应数据

注意:这里的path是路径,并不包含IP和端口。这个请求会被nginx内部的server监听并处理。

但是我们希望这个请求发送到Tomcat服务器,所以还需要编写一个server来对这个路径做反向代理:

微服务 占内存_微服务_12

笔者再试试把Windows 防火墙关掉,看看能不能ping 上

微服务 占内存_架构_13

微服务 占内存_微服务_14

算了算了,我直接打包上传到服务器

我先试试

微服务 占内存_缓存_15

改一下端口

微服务 占内存_缓存_16

Linux 本地测试

微服务 占内存_缓存_17

OK,没问题【我真是个叼毛】

微服务 占内存_微服务 占内存_18

先试试,不行再想办法

【封装http查询的函数】

我们可以把http查询的请求封装为一个函数,放到OpenResty函数库中,方便后期使用。

  1. 在/usr/local/openresty/lualib目录下创建common.lua文件:

微服务 占内存_缓存_19

微服务 占内存_微服务_20

  1. 在common.lua中封装http查询的函数

微服务 占内存_架构_21

-- 封装函数,发送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

微服务 占内存_缓存_22

微服务 占内存_spring cloud_23

OK, 改成中文

微服务 占内存_spring cloud_24

OK