czarea / lua-resty-apollo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Alt textAlt textAlt textAlt text

lua-resty-apollo


Content

配置中心实现配置的集中管理,持久化,通过配置中心,可以方便管理项目配置。对于后台服务而言,配置中心是实现灰度发布,配置热更新,优化代码结构。解决传统项目代码通过在项目里通过代码或文件的形式的缺点。在配置中心可以增加不同账户,配置不同权限,可以方便运营、产品等修改项目配置,更好管理。

配置中心的一般思路是创建一个config对象,该对象代表一个nameSpace的全部配置,config对象属性包含一个hashMap,通过key-value直观的方式,获取配置,热更新则是通过轮询apollo服务,更新hashMap。然而Openresty是多进程的web服务,每个worker进程的变量互相不影响,无法通过传统的方式实现热更新。

本设计,利用Openresty共享内存实现一个本地配置仓库,每个worker进程中的ConfigService通过轮询的方式,检查更新,而本地配置仓库则是Openresty特权进程的轮询服务实现更新。


介绍

配置中心数据仓库服务采用apollo,为此先介绍apollo相关概念:

name note
app_id 项目ID
nameSpace 命名空间,代表一份配置文件、配置集合

可以去了解一下Apollo API开发文档


Installation

1 将libs目录拷贝至Openresty项目一级目录下,按下面使用说明使用。

使用

    1. 修改nginx.conf:

    http模块增加:

   lua_shared_dict config_shared 30m; # 配置中心需配置的共享内存
   init_worker_by_lua_file 'conf/libs/config/config_init_worker.lua'; # 启动相关定时服务
    1. 修改init_by_lua.lua:

    (实例化ConfigService和Config的操作需要在init_by_lua阶段完成,如果apollo服务异常,会自动宣告重启失败,保证服务不受apollo影响) (启动Openresty特权进程)

   local process = require "ngx.process"
   local ok, err = process.enable_privileged_agent()
   -- 检查是否启动成功
   if not ok then
      ngx.log(ngx.ERR, "create privileged process failed")
      error("create privileged process failed")
   end
   -- 获取ConfigService对象,代表一个app_id对应的配置, zdao_midservice为app_id,为全局变量
   MidConfigServive = require "libs.agollo.configService".new("zdao_midservice")
  
   -- 通过ConfigService获取config对象
   LBSConfig = MidConfigServive:GetConfig("zdao_backend.lbs")
    1. apollo相关配置: 通过配置文件的方式: /usr/local/openresty/nginx/conf/APOLLO_META_ADDR.txt apollo的metaserver地址 例如:127.0.0.1:8080
    1. 使用:
   local lbs_config = LBSConfig:GetValue("gaude_config"):Json() -- 表示获取nameSpace为zdao_backend.lbs下gaude_config的值,并转化为json对象

相关方法介绍

    -- 获取ConfigService对象,传参为app_id
    MidConfigServive = require "libs.agollo.configService".new("zdao_midservice")

    -- 通过ConfigService获取config对象,传参为nameSpace
    LBSConfig = MidConfigServive:GetConfig("zdao_backend.lbs")

    -- 通过Config对象获取value对象,传参为key的值
    local value = LBSConfig:GetValue("gaude_config")

    -- value相关方法
    local lbs_config = LBSConfig:GetValue("gaude_config"):Json() -- 转化为table
    local lbs_config = LBSConfig:GetValue("str"):String() -- 转化为string
    local lbs_config = LBSConfig:GetValue("num"):Int() -- 转化为int
    local lbs_config = LBSConfig:GetValue("float"):Float() -- 
    local lbs_config = LBSConfig:GetValue("bool"):Boolean() -- 

About

License:Apache License 2.0


Languages

Language:Lua 100.0%