Apollo通过客户端openapi方式修改、上传、获取配置

添加权限

apollo管理员账户进入http://{apollo_protal_url}/open/manage.html 创建第三方应用,生成一个openapi的token,如下图所示:

  • 第三方应用id:唯一标示,没啥用,字母数字即可
  • 部门:应用归属部门,用于筛选
  • 第三方应用名称:应用名称,一个简单的描述
  • 项目负责人:openapi操作的用户,该用户必须具有该项目的操作全选,没有的话需要在apollo项目中授权添加,否则调用时会出现403错误。
  • token:自定生成,openapi客户端参数
  • 被管理appid:已在apollo中存在的需要操作的apollo的应用id。
  • 被管理的Namespace:openapi可操作的namesapce,授权类型为namespace时,最少填一个。
  • 授权类型:namespace:指定namesapce,app:所有namespace
  • 环境:指定允许操作的配置环境

 

创建apollo客户端

import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

/**
 * @description: apollo openapi连接
 * @author: lizz
 * @date: 2020/7/15 11:27
 */
@Configuration
@Profile({"dev","test"}) //运行环境
public class ApolloConfig {
    /**
     * apollo portal url
     * apollo 访问地址
     **/
    @Value("${appkey.apollo.url}")
    private String portalUrl;
    /**
     * token apollo中添加的openapi token
     **/
    @Value("${appkey.apollo.token}")
    private String token;

    @Bean
    public ApolloOpenApiClient apolloOpenApiClient() {
        ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
                .withPortalUrl(portalUrl)
                .withToken(token)
                .build();
        return client;
    }
}

操作接口

/**
 * @description: 操作apollo配置
 * @author: lizz
 * @date: 2020/7/15 11:30
 */
@RestController
@RequestMapping(value = "apollo")
@Profile({"dev","test"}) //内部环境使用
public class ApolloController {
    private static final Logger logger = LoggerFactory.getLogger(ApolloController.class);

    

    //apollo中项目id
    private final static String appId = "framework-gateway"; 
    //apollo操作用户
    private final static String opUser = "lizz"; 
    //apollo中集群名称,apollo默认集群为default
    private final static String cluster = "aliyun"; 
    //apollo中集群内namespace名称
    private final static String namespace = "namespace-zone1";

    //apollo操作客户端
    private ApolloOpenApiClient apolloClient;
    public ApolloController(ApolloOpenApiClient client) {
        this.apolloClient = client;
    }


    /**
     * 获取环境列表,如
     * [{"clusters":["huawei","default"],"env":"PRO"},{"clusters":["default"],"env":"DEV"}]
     * @param server apollo中服务id
     * @return
     */
    @GetMapping("/envclusters/{server}")
    public Object getEnvclusters(@PathVariable String server) {
        return JSON.toJSONString(apolloClient.getEnvClusterInfo(server));
    }

    /**
     * 向apollo中新增配置项,为未发布状态。
     * post uri:apollo/dev/add
     * @param env 指定apollo的数据环境
     * @return
     */
    @PostMapping("/{env}/add}")
    public Object addParam(@PathVariable String env) {
        OpenItemDTO openItemDTO = new OpenItemDTO();
        openItemDTO.setKey("timeout");
        openItemDTO.setValue("100");
        openItemDTO.setComment("超时时间");
        openItemDTO.setDataChangeCreatedBy(opUser);
        OpenItemDTO item = apolloClient.createItem(appId, env, cluster, namespace, openItemDTO);
        return JSON.toJSONString(item);
    }

    /**
     * 修改apollo中配置项,为未发布状态。
     * post uri:apollo/dev/update
     * @param env 指定apollo的数据环境
     * @return
     */
    @PostMapping("/{env}/update")
    public Object updateParam() {
        OpenItemDTO openItemDTO = new OpenItemDTO();
        openItemDTO.setKey("timeout");
        openItemDTO.setValue("200");
        openItemDTO.setComment("超时时间");
        openItemDTO.setDataChangeCreatedBy(opUser);
        apolloClient.createOrUpdateItem(appId, env, cluster, namespace, openItemDTO);
        return JSON.toJSONString(openItemDTO);
    }

    /**
     * 获取apollo中namespace的所有配置项
     * @param env 指定apollo的数据环境
     * @return
     */
    @GetMapping("/{env}/namespace")
    public Object getAllNameSpace() {
        return JSON.toJSONString(apolloClient.getNamespace(appId, env, cluster, "application"));
    }


    /**
     * 获取某一项配置
     * @param env 指定apollo的数据环境
     * @param key 配置项key
     * @return
     */
    @GetMapping("/{env}/getParam")
    public Object getParam(String env,String key) {
        OpenItemDTO getItem = apolloClient.getItem(appId, env, cluster, namespace, key);
        return JSON.toJSONString(getItem);
    }

    /**
     * 刷新发布配置
     *
     * @param env 指定apollo的数据环境
     * @return
     */
     public Object releaseParam(String env) {
        NamespaceGrayDelReleaseDTO namespaceGrayDelReleaseDTO = new NamespaceGrayDelReleaseDTO();
        //配置版本名称
        namespaceGrayDelReleaseDTO.setReleaseTitle(System.currentTimeMillis() + "-release");
        //刷新说明
        namespaceGrayDelReleaseDTO.setReleaseComment("auto release");
        namespaceGrayDelReleaseDTO.setReleasedBy(opUser);
        OpenReleaseDTO openReleaseDTO = apolloClient.publishNamespace(appId, env, cluster, namespace, namespaceGrayDelReleaseDTO);
        return JSON.toJSONString(openReleaseDTO);
    }
}
    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizz666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值