49 | 微服务API网关搭建三步曲(三)
温铭
该思维导图由 AI 生成,仅供参考
你好,我是温铭。
今天这节课,微服务 API 网关搭建就到了最后的环节了。让我们用一个最小的示例来把之前选型的组件,按照设计的蓝图,拼装运行起来吧!
Nginx 配置和初始化
我们知道,API 网关是用来处理流量入口的,所以我们首先需要在 Nginx.conf 中做简单的配置,让所有的流量都通过网关的 Lua 代码来处理。
这里我们使用开源 API 网关 APISIX 为例,所以上面的代码示例中带有 apisix 的关键字。在这个示例中,我们监听了 9080 端口,并通过 location / 的方式,把这个端口的所有请求都拦截下来,并依次通过 access、rewrite、header filter、body filter 和 log 这几个阶段进行处理,在每个阶段中都会去调用对应的插件函数。其中, rewrite 阶段便是在 apisix.http_access_phase 函数中合并处理的。
而对于系统初始化的工作,我们放在了 init_worker 阶段来处理,这其中包含了读取各项配置参数、预制 etcd 中的目录、从 etcd 中获取插件列表、对于插件按照优先级进行排序等。我这里列出了关键部分的代码并进行讲解,当然,你可以在 GitHub 上看到更完整的初始化函数。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了微服务API网关的搭建过程,通过Nginx配置和初始化、匹配路由、加载插件和编写插件四个方面展开。首先,作者介绍了在Nginx.conf中配置API网关的Lua代码,以及系统初始化的工作。接着,文章详细讲解了匹配路由的过程,包括如何根据请求信息匹配路由规则。然后,文章介绍了加载插件的过程,包括插件的过滤和按优先级逐个运行的步骤。最后,作者以编写一个限制请求数的插件为例,展示了插件的编写过程。通过引入基础库和定义插件参数,最后将插件的处理函数挂载到rewrite阶段。整体来看,本文通过具体的代码示例,详细介绍了微服务API网关的搭建过程,为读者提供了实用的技术指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《OpenResty 从入门到实战》,新⼈⾸单¥59
《OpenResty 从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 一声扣钉老师,如果需要修改respones body的内容,就只能在body_filter里做修改,这样引起body长度与content-length长度不一致,应该如何处理?
作者回复: 这是个好问题。如果你修改了响应体,那么也同时需要在header_filter阶段把 content_length 置为 nil: ngx.header.content_length = nil
2019-09-1627 - SMTCode快结课了,基本上跟下来了,但自己实践偏少(工作中目前未用)。不过确实是强大的课。感谢温老师的持续分享。后期工作中择机引入~
作者回复: 可以先从 OpenResty 替换 Nginx 开始入手,这是成本最低的:)
2019-09-161 - 铁匠我自己实现了一个简单的网关服务,注册中心使用etcd,因为是初学,还有很多改进的地方,设计思路和优化点欢迎老师和大家指点。github: https://github.com/fengjx/resty-gateway2020-02-237
- CheverJohn给老师更新一下,目前limit-count 插件选用了 jsonschema 了,而不是 腾讯的 rapidjson 啦。建议注明2022-02-102
- 蓝色海洋老师您好,我这边想实现一个kong的灰度发布的插件,感觉没有思路,请老师指点一下谢谢2019-10-1522
- 言身寸飞插件那块不是很明白可以详细讲讲么2019-10-071
- 段先森老师 把openresty作为IM系统的链接层可行吗 就是维护ws链接 应用层ack这些2019-09-1711
- 王慧东老师,麻烦问一下怎么在init_worker_by_lua 加载数据库信息??2020-08-12
- 半夜一声笑老师,如果这样调用ngx.timer.at(0,func) 可以获取到func返回的结果吗 找了一圈没找到合适的方法2020-06-02
- 陈海源温老师,这个demo的源代码的地址哪里可以查看2019-09-181
收起评论