【问题标题】:lua-resty-http:connect method clarificationlua-resty-http:connect 方法说明
【发布时间】:2018-05-01 23:40:13
【问题描述】:

我一直在实现一个 kong 插件,它需要发出 HTTP 请求来检索信息以与上游服务共享它。

有一个名为lua-resty-http 的优秀库可用于发出 HTTP 请求。

包含需要信息的服务,在proxy后面配置,匹配路径:/endpoint-providing-info.

我们的目标是依靠代理功能来避免解析具有与该问题无关的特定形式的主机名。

通过玩耍,我能够通过执行以下操作来实现所需的行为:

local ok, err = http_client:connect("127.0.0.1", ngx.var.server_port)
if not ok and err then return nil, 'there was a failure opening a connection: ' .. err
local res, err = http_client:request({
    method = 'GET',
    path = '/endpoint-providing-info'
})
//parse the response, etc...

请求被路由到上游服务并按预期工作。

我主要关心的是:

通过连接到 localhost,我假设当前 Nginx 节点是参与请求的节点。这会影响性能吗?直接连接到集群更好/可能吗?

【问题讨论】:

    标签: nginx lua openresty kong


    【解决方案1】:

    我假设你为当前的 nginx 配置了一个匹配 /endpoint-providing-info 的位置,使用代理模块并为集群配置一个上游。

    如果你会使用lua-resty-http

    优点 - 您可以使用 body_reader - 一个迭代器函数,用于以流方式读取正文。

    缺点 - 您的请求将通过内核边界(环回接口)。

    另一种可能性是使用ngx.location.capture API 发出子请求

    优点 - 子请求只是模仿 HTTP 接口,但不涉及额外的 HTTP/TCP 流量或 IPC。一切都在内部高效地在 C 级别上运行。

    缺点 - 它是完全缓冲的方法,无法有效地处理大响应。

    更新 - 海事组织:

    如果您期望上游服务器有很大的响应,-lua-resty-http 是您的选择。

    如果您希望上游服务器有很多小的响应 - 应该使用 ngx.location.capture

    【讨论】:

    • lua-resty-http 更方便。但我仍然想知道你在那里列出的缺点是否会导致一些潜在的问题。我假设不是,因为我们只是向参与它的同一个节点添加了一个额外的请求。
    • 我已将我的意见添加到我的回答中
    猜你喜欢
    • 2016-12-13
    • 2017-04-28
    • 2023-02-19
    • 1970-01-01
    • 2023-03-22
    • 2020-10-31
    • 2013-11-10
    • 2011-12-24
    • 2013-09-15
    相关资源
    最近更新 更多