Lua OpenResty 使用 protobuf 和 rabbitmq AMQP 发送和接收消息

项目中有个需求,需要使用Google的protobuf作为压缩协议,然后使用rabbitmq AMQP来发送和接收消息,在研究使用这两个工具中,遇到了有一些坑,之前有写了两篇来介绍分别使用,《 在 lua 中使用 protobuf》和《Lua OpenResty 使用rabbitmq AMQP协议发送和接收消息》 ,这里我们来结合使用一下,然后顺便解决一下lua的相关库的使用问题。 protobuf 相关步骤 1.安装 protoc 首先安装依赖库 sudo apt-get install autoconf automake libtool curl make g++ unzip 下载、解压安装包 curl -L -o protobuf-all-3.6.1.tar.gz https://gi……

阅读全文 »

微服务 API 网关 Kong 日志中文文档

日志 原文链接: https://docs.konghq.com/1.1.x/logging/ (不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 日志等级 日志级别在Kong的配置中设置。以下是日志级别,按照严重程度顺序递增,debug, info, notice, warn, error and crit。 debug:它提供有关插件的runloop和每个插件或其他组件的调试信息。只是在调试期间使用,因为它的消息量太多了。 info/notice:kong没有在这两个级别上产生很大的差异。提供有关正常行为的信息,其中大多数行为可以忽略。 warn:要记录任何不会导致事务丢失但需要进一步调查的异常行为,应使用警告级别。 error:用……

阅读全文 »

微服务 API 网关 Kong 代理中文文档

原文链接: https://docs.konghq.com/1.1.x/proxy/ (不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 代理 简介 在本文档中,我们将通过详细解释其路由功能和内部工作原理,来了解Kong的代理功能。 Kong公开了几个可以通过两个配置属性调整的接口: proxy_listen:它定义了一个地址/端口列表,Kong将接受来自客户端的公共流量并将其代理到您的上游服务(默认为8000)。 admin_listen:它还定义了一个地址和端口列表,但是这些应该被限制为仅由管理员访问,因为它们暴露了Kong的配置功能:Admin API(默认为8001)。 注意:从1.0.0开始,API实体已被删除。本文档将介绍使……

阅读全文 »

Lua OpenResty 使用rabbitmq AMQP协议发送和接收消息

如果想要在openresty中使用AMQP协议发送和接收消息的话,需要使用到一个第三方库。地址为:https://github.com/mengz0/amqp 。 当然,首先你得在自己的环境中安装一个rabbitmq,或者使用远程的rabbitmq也可以。 openresty也是要安装一下的,这里就不啰嗦了。 第一步:安装第三方库 luarocks install amqp 如果没有安装 luarocks 可以安装一下luarocks。 第二步:使用amqp发送&接收消息 可以直接参考https://github.com/mengz0/amqp 中的例子,但是这个库的例子写的非常简略,导致很多参数需要你自己去源码中查看,我在这个例子中列举了一些常用的参数,可以参考使用一下。 发送消息……

阅读全文 »

在 lua 中使用 protobuf

安装protobuf 具体步骤可以参考官方文档https://github.com/protocolbuffers/protobuf/blob/master/src/README.md 这里只列出一些其中比较的重要的步骤。 先安装一些依赖的库 sudo apt-get install autoconf automake libtool curl make g++ unzip 然后下载需要的安装包 curl -L -o protobuf-all-3.6.1.tar.gz https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz 接着解压 tar -xzvf pro……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 插件配置

原文地址:https://docs.konghq.com/1.1.x/plugin-development/plugin-configuration/(不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 简介 大多数情况下,您的插件可以配置为满足您的所有用户需求。当插件被执行的时候,您的插件的配置存储在Kong的数据存储区中,以检索它并将其传递给handler.lua方法。 配置由Kong中的Lua表组成,我们称之为 schema。它包含用户在通过Admin API启用插件时将设置的键/值属性。Kong为您提供了一种验证用户插件配置的方法。 当用户向Admin API发出请求以启用或更新给定Service,Route和/或Consumer……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 文件结构

原文地址:https://docs.konghq.com/1.1.x/plugin-development/file-structure/ (不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 本章假定你已经会使用Lua语言 介绍 将您的插件视为一组Lua模块。本章中描述的每个文件都被视为一个单独的模块。如果他们的名字遵循这个约定,Kong将检测并加载你的插件的模块: kong.plugins.<plugin_name>.<module_name> 您的模块当然需要通过package.path变量访问,可以通过lua_package_path配置属性调整您的需求。但是,安装插件的首选方法是通过LuaRocks,它与……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 安装/卸载插件

原文地址:https://docs.konghq.com/1.1.x/plugin-development/distribution/(不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 介绍 Kong的自定义插件由Lua源文件组成,这些源文件需要位于每个Kong节点的文件系统中。本指南将为您提供逐步说明,使Kong节点了解您的自定义插件。这些步骤应该应用于Kong集群中的每个节点,以确保每个节点上都有自定义插件。 打包源 您可以使用常规打包策略(例如tar),也可以使用LuaRocks包管理器为您执行此操作。我们推荐使用LuaRocks,因为它在使用其中一个官方分发包时与Kong一起安装。 使用LuaRocks时,您必须创建一个rock……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 缓存自定义实体

原文地址:https://docs.konghq.com/1.1.x/plugin-development/entities-cache/ (不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 介绍 您的插件可能需要经常访问每个请求 和/或 响应的自定义实体(在前一章中可见)。通常,加载它们一次并将它们缓存在内存中会显着提高性能,同时确保数据存储区不会因负载增加而受到压力。 考虑一个api-key身份验证插件,需要在每个请求上验证api-key,从而在每个请求中从数据存储区加载自定义凭据对象。当客户端提供api-key以及请求时,通常你会查询数据存储区以检查该密钥是否存在,然后,阻止请求或检索 Consumer ID以识别用户,这将在每个……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 实现自定义逻辑

简介 Kong插件允许您在 request/response 的生命周期中的几个入口点注入自定义逻辑(使用 Lua 语言),因为它由Kong代理。为此,必须实现base_plugin.lua 接口的一个或多个方法。这些方法将在命名空间下的模块中实现:kong.plugins。<plugin_name> .handler。 Module kong.plugins.<plugin_name>.handler 可用的请求上下文 插件接口允许您覆盖handler.lua文件中的以下任何方法,以在Kong的执行生命周期的各个入口点实现自定义逻辑: 函数名 LUA-NGINX-MODULE Context 描述 :init_worker() init_worker_by_lua ……

阅读全文 »

在Kong的插件中使用自建数据表的问题

目前正在开发的kong 插件中需要用到自己新建表,然后对其进行读写,但是由于kong的版本升级原因,有一些问题在官方文档中没有提到,导致一直读取失败,主要注意的点如下: 1.迁移文件的差异 kong的版本>= 1.0 迁移文件的名字为000_base_xxx.lua,其中格式格式如下: return { postgres = { up = [[ CREATE TABLE IF NOT EXISTS "xxxxx" ( "id" uuid NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY, "xx" int NOT NULL, "xx" bool, "xx" json, "xx" json ); ]], }, cassandra ={ up ……

阅读全文 »

微服务 API 网关 Kong 插件开发 – 访问数据存储区

原文地址:https://docs.konghq.com/1.1.x/plugin-development/access-the-datastore/ (不能保证所有的翻译都是准确无误的,所有如有翻译的不准确或错误之处,请一定记得查看原文,并欢迎留言指出)。 简介 Kong通过我们称为“DAOs”的类与模型层交互。本章将详细介绍与数据存储交互的可用API。Kong支持两个主数据存储:Cassandra 3.x.x和PostgreSQL 9.5+。 kong.db Kong 的所有实例表示为: 描述实体在数据存储区中与哪个表相关的模式,对其字段的约束,如外键,非空约束等…此schema是插件配置章节中描述的表。 DAO类的一个实例映射到当前正在使用的数据库(Cassandra或Po……

阅读全文 »