IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Lion 使用文档 -> 正文阅读

[Java知识库]Lion 使用文档

本文由 简悦 SimpRead 转码, 原文地址 github.com

Lion 使用文档

1 Lion 简介

Lion 是一个配置管理平台,可以实时推送配置变更。

1.1 Lion 架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtbXzGmm-1647245537941)(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACbklEQVRoQ+2aMU4dMRCGZw6RC1CSSyQdLZJtKQ2REgoiRIpQkCYClCYpkgIESQFIpIlkW+IIcIC0gUNwiEFGz+hlmbG9b1nesvGW++zxfP7H4/H6IYzkwZFwQAUZmpJVkSeniFJKA8ASIi7MyfkrRPxjrT1JjZ8MLaXUDiJuzwngn2GJaNd7vyP5IoIYY94Q0fEQIKIPRGS8947zSQTRWh8CwLuBgZx479+2BTkHgBdDAgGAC+fcywoyIFWqInWN9BSONbTmFVp/AeA5o+rjKRJ2XwBYRsRXM4ZXgAg2LAPzOCDTJYQx5pSIVlrC3EI45y611osMTHuQUPUiYpiVooerg7TWRwDAlhSM0TuI+BsD0x4kGCuFSRVzSqkfiLiWmY17EALMbCAlMCmI6IwxZo+INgQYEYKBuW5da00PKikjhNNiiPGm01rrbwDwofGehQjjNcv1SZgddALhlJEgwgJFxDNr7acmjFLqCyJuTd6LEGFttpmkYC91Hrk3s1GZFERMmUT01Xv/sQljjPlMRMsxO6WULwnb2D8FEs4j680wScjO5f3vzrlNJszESWq2LYXJgTzjZm56MCHf3zVBxH1r7ftU1splxxKYHEgoUUpTo+grEf303rPH5hxENJqDKQEJtko2q9zGeeycWy3JhpKhWT8+NM/sufIhBwKI+Mta+7pkfxKMtd8Qtdbcx4dUQZcFCQ2I6DcAnLUpf6YMPxhIDDOuxC4C6djoQUE6+tKpewWZ1wlRkq0qUhXptKTlzv93aI3jWmE0Fz2TeujpX73F9TaKy9CeMk8vZusfBnqZ1g5GqyIdJq+XrqNR5AahKr9CCcxGSwAAAABJRU5ErkJggg==)]

1.2 Lion 配置加载顺序

  1. 环境变量
  2. 本地配置文件
  3. zookeeper

2 Lion 使用

2.1 引入 Maven 依赖

<dependency>
     <groupId>com.dianping.lion</groupId>
     <artifactId>lion-client</artifactId>
     <version>0.5.0</version>
</dependency>

2.2 定义 Lion 运行环境

2.2.1 环境信息从以下文件读取

  1. $WAR_ROOT/appenv
  2. /data/webapps/appenv

$WAR_ROOT/appenv 的存在是为了兼容老版本,优先读取
如果文件不存在则读取 /data/webapps/appenv
如果这个文件也不存在,则默认 dev 环境。
在 Windows 环境下,根据程序运行目录的不同,appenv 文件需要放在

  • C:/data/webapps/appenv 或者
  • D:/data/webapps/appenv 或者
  • E:/data/webapps/appenv 等

2.2.2 appenv 文件格式如下

deployenv:环境,如 dev
zkserver:ZK 服务器地址,如 dev.lion.dp:2181
swimlane:泳道(可选),一般为空

2.2.3 各环境标准 appenv 文件如下

  • dev
deployenv=dev
zkserver=dev.lion.dp:2181


  • alpha
deployenv=alpha
zkserver=alpha.lion.dp:2182


  • qa
deployenv=qa
zkserver=qa.lion.dp:2181


2.3 API 使用方式

使用 Lion.setSwimlaneReadRollback(false) 设置为 false 则对应 swimlane 为 null 时不从 default 泳道中读取数值 使用 Lion.setReadFromCache(false) 设置为 false 则不从本地 cache 中读取,从数据源直接拿数据

public class Lion {

    public static String get(String key)

    public static String get(String key, String defaultValue)

    public static String getStringValue(String key)

    public static String getStringValue(String key, String defaultValue)

    public static byte getByteValue(String key)

    public static byte getByteValue(String key, byte defaultValue) 

    public static short getShortValue(String key)

    public static short getShortValue(String key, short defaultValue)

    public static int getIntValue(String key)

    public static int getIntValue(String key, int defaultValue)

    public static long getLongValue(String key)

    public static long getLongValue(String key, long defaultValue)

    public static float getFloatValue(String key)

    public static float getFloatValue(String key, float defaultValue)

    public static double getDoubleValue(String key)

    public static double getDoubleValue(String key, double defaultValue)

    public static boolean getBooleanValue(String key)

    public static boolean getBooleanValue(String key, boolean defaultValue) 

    public static void addConfigChangeListener(ConfigChange configChange)

    public static void removeConfigChangeListener(ConfigChange configChange)
    
    public static void setSwimlaneReadRollback(Boolean swimlaneReadRollback)
    
    public static void setReadFromCache(Boolean readFromCache)

}

2.4 Spring 集成

2.4.1 初始化 Lion

<beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:context="http://www.springframework.org/schema/context"
            xmlns:tx="http://www.springframework.org/schema/tx" 
            xmlns:lion="http://code.dianping.com/schema/lion"
            xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                http://code.dianping.com/schema/lion http://code.dianping.com/schema/lion/lion-1.0.xsd">

    <context:component-scan base-package="com.dianping" />
    
    <lion:config />

    <bean >
        <property ${lion-test.local}" />
        <property ${lion-test.remote}" />
    </bean>
    
</beans>

<lion:config /> 可以指定属性:

  • propertiesPath 用于指定自定义的配置文件的位置,默认值是config/applicationContext.properties
  • includeLocalProps 用于指定是否需要在线上环境使用自定义配置文件中的值,默认值是 false
  • order 用于指定 Lion 配置的加载顺序

2.4.2 自定义配置文件说明

applicationContext.properties 有两个功能:

  1. 配置覆盖 配置覆盖只在 dev 和 alpha 环境有效,其它环境自动失效,除非在 Lion 初始化时指定includeLocalProps=true 比如在配置文件中指定:lion-test.local=local 可以用上面的 key-value 覆盖 dev 环境开发时 Lion 系统上的配置,可以在本地开发调试时自己定义自己的配置信息,在上其他测试环境和生产环境时自动失效,避免忘记删除此配置导致其他环境使用自定义配置信息
  2. 配置引用
    配置引用在所有环境中有效,比如在配置文件中指定:lion-test.local=${lion-test.remote} 这时在 Spring 配置文件中遇到占位符${lion-test.local}时,会自动使用${lion-test.remote}的配置

2.4.3 通过占位符使用 Lion 配置

如上面的例子所示,在 Spring 配置文件中通过占位符 ${lion-test.local} 来使用 Lion 上的配置

2.4.4 通过 annotation 使用 Lion 配置

public class ConfigHolder {

    private String local;
    @LionConfig("lion-test.remote")
    private String remote;
    @LionConfig(":mmmmmm")
    private String multi;

    public String getLocal() {
        return local;
    }

    public void setLocal(String local) {
        this.local = local;
    }

    public String getRemote() {
        return remote;
    }

    public void setRemote(String remote) {
        this.remote = remote;
    }

    public String getMulti() {
        return multi;
    }

    public void setMulti(String multi) {
        this.multi = multi;
    }

}

Annotation 为 @LionConfig,需要指定在 field 上。可以通过 Annotation 指定 key 和默认值。

@LionConfig 的 pattern 如下:

  • @LionConfig(“key”) 指定 key,没有默认值
  • @LionConfig(“key:defaultValue”) 指定 key 和默认值,当 key 不存在时使用默认值
  • @LionConfig(":defaultValue") 只指定默认值,key 由 Lion 生成,生成规则见下
  • @LionConfig 什么都不指定,key 由 Lion 生成

Lion 生成 key 的前提是必须要有 app.name,规则如下:

key = app.name + "." + (camel case => dotted string)


假设 app.name = “lion-test”,示例如下:

FieldKey
zookeeperAddress=> lion-test.zookeeper.address
propertiesPath=> lion-test.properties.path
includeLocalProps=> lion-test.include.local.props

3 Lion-API 接口说明

3.1.lion sso 权限验证

为了保证接口的调用安全,调用 lion-api 需要通过 sso 接口获得 token 或者 使用点评账号密码调用 lion-api 下面两种调用方式二选一

当使用下面两种方式中任意一种调用 lion-api 接口的时候,任何接口中所需的参数 id 可以不必填写。

3.1.1 传递 access_token 方法:

从 sso 获得 token 的文档参考 5.2 节: http://code.dianpingoa.com/ba-base/cas-server/tree/master SSO 需要的参数
client_id=lion_api client_secret=4qSXANX2wHdMVzcr

获得 token 之后在 调用时增加参数 access_token=XXXXXX 例如 http://lionapi.dp:8080/product2/list?team = 架构 & access_token=XXXXX

3.1.2. 直接传递账号密码的方法:

在调用 lion-api 的接口的时候添加参数 account 和参数 password account 为你的点评账号 password 为你的密码 例如 http://lionapi.dp:8080/product2/list?team = 架构 & account=myaccount&password=mypassword

3.2.Lion-API 接口

公共参数

1. id 标识调用者身份,用于记录操作日志 例如 id=2
2. env 指定环境 可选值:dev | alpha | qa | prelease | product | performance


返回值

返回值是一个 json 格式的对象,字段如下
1. status 值为 success 或者 error
2. message 具体出错信息
3. result 调用返回值, json 格式


团队接口

- 路径 /team2
- 动作 
	/list 列出团队 
- 样例 http://lionapi.dp:8080/team2/list


产品线接口

- 路径 /product2
- 动作
	/list 获取团队列表
- 参数
	team
- 样例 http://lionapi.dp:8080/product2/list?team=架构


项目管理接口

- 路径 /project2
- 动作
	/list 	获取项目列表 	参数 product, team
	/create 创建项目 		参数 id, project, product, owner
	/delete 删除项目 		参数 id, project
	/update 更新项目 		参数 id, project, product, name, owner, member, operator
- 参数
	project 	项目名 		project=lion
	team		团队名		team=架构
	product		产品线名		product=中间件
	owner		项目负责人	owner=chen.hua
	member		项目成员		member=chen.hua
	operator	项目运维		operator=chen.hua
	name		新项目名		name=pigeon2
- URL样例
	* 创建项目 http://lionapi.dp:8080/project2/create?id=2&project=lion-xxx&product=中间件&owner=enlight.chen
	* 获取项目列表:http://lionapi.dp:8080/project2/list?product=中间件


配置管理接口

- 路径 /config2
- 动作
	/get	获取配置			参数 env, id, key, keys, prefix, group
	/set 	设置配置			参数 env, id, key, group, value
	/list 	获取配置列表		参数 prefix
	/create 创建配置			参数 id, project, key, desc
- 参数
	key		配置名		样例 key=pigeon.timeline.enabled
	keys	配置列表		样例 keys=pigeon.timeline.enabled,pigeon.monitor.enabled
	prefix	配置前缀		样例 prefix=pigeon
	group 	泳道名		样例 group=tuangou
	value	配置值		样例 value=enabled
- URL 样例:
	* 获取配置列表:http://lionapi.dp:8080/config2/list?prefix=pigeon
	* 获取单个配置值:http://lionapi.dp:8080/config2/get?env=dev&id=2&key=pigeon.timeline.enabled
	* 获取多个配置值:http://lionapi.dp:8080/config2/get?env=dev&id=2&keys=pigeon.timeline.enabled,pigeon.monitor.enabled
	* 获取项目配置值:http://lionapi.dp:8080/config2/get?env=dev&id=2&prefix=pigeon
	* 设置配置:http://lionapi.dp:8080/config2/set?env=dev&id=2&key=lion-test.host&value=1.1.1.1
	* 创建配置:http://lionapi.dp:8080/config2/create?id=2&project=lion-test&key=lion-test.xxx&desc=xxx		


密文,明文转换接口

- URL 样例:
	* 获取明文:http://lionapi.dp:8080/encode?text=abcde
	* 获取密文:http://lionapi.dp:8080/decode?text=~{f4f7f2d48796b0f270f65900f0f0e6b64f10396}


4 分布式锁使用

4.1 分布式锁使用事项

锁的个数要 O(1) 不能随着请求的增长而增长


4.2 分布式锁使用方式

以项目名加一个前缀"/"来命名 
总共两种锁 ReentrantLock 和 ReentrantReadWriteLock 含义与 Java 中的锁相同
使用方式
String lockName = "/testlock";
lock = new ReentrantLock(lockName);
包名 com.dianping.lion.lock 


5 接手美团的项目的配置问题

5.1 有默认值的配置 比如 ${localKey:abc}

版本升级至 0.6.1-SNAPSHOT 在spring 配置 lion initializeConfig 这个 bean 的地方 加上    <property  />


5.2 美团侧不同环境 import 不同的配置文件

参考 http://stackoverflow.com/questions/16481206/spring-property-placeholder-not-working


6 客户端鉴权

6.1 作用

防止 zookeeper 上面的值被随意修改 加上鉴权后只有带着账号密码的 lion 客户端才能访问 zookeeper 上面的值 访问的账号为项目在 lion 上面的名称, 密码在 lion web 端进入项目配置管理界面查看

6.2 使用方法

    <bean lazy-init="false">
        <property />
        <property />
        <property />
    </bean>


  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:22:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:40:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码