SpringBoot集成Marathon

引入Maven依赖

       <dependency>
            <groupId>com.mesosphere</groupId>
            <artifactId>marathon-client</artifactId>
            <version>0.6.0</version>
        </dependency>

自动配置

@Configuration
@EnableConfigurationProperties(MarathonConfig.MarathonProperties.class)
public class MarathonAutoConfig {

    @Autowired
    private MarathonProperties marathonProperties;

    @Data
    @ConfigurationProperties("marathon")
    public static class MarathonProperties {
        private String uri;
    }

    @Bean
    public MarathonUtils marathonUtils(){
        if(marathonProperties == null){
            return null;
        }
        final MarathonUtils hdfsUtils = new MarathonUtils(marathonProperties.getUri());
        return hdfsUtils;
    }
}

配置Marathon地址

在spring.properties中添加如下配置:

marathon.uri=http://marathon.xxx.com:8080

MarathonUtils

import lombok.extern.slf4j.Slf4j;
import mesosphere.marathon.client.Marathon;
import mesosphere.marathon.client.MarathonClient;
import mesosphere.marathon.client.model.v2.*;

import java.util.Collection;
import java.util.List;

/**
 * Marathon服务管理
 *
 * 参考文档:https://blog.csdn.net/qq_27232757/article/details/74565095
 * @author wangyong
 * @date 2018/11/1
 */
@Slf4j
public class MarathonUtils {


    private final Marathon marathon ;

    public MarathonUtils(final String marathonUrl) {
        marathon = MarathonClient.getInstance(marathonUrl);
    }

    public List<VersionedApp> getApps(){
        final GetAppsResponse response = marathon.getApps();
        return response.getApps();
    }


    /**
     * 获取App信息
     * @param id 应用ID
     */
    public VersionedApp getApp(String id) {
        final GetAppResponse appResp = marathon.getApp(id);
        final VersionedApp app = appResp.getApp();
        return app;
    }

    /**
     * 获取正在部署的App
     */
    public List<Deployment> getDeployments() {
        final List<Deployment> deployments = marathon.getDeployments();
        return deployments;
    }

    /**
     * 获取任务列表
     */
    public Collection<Task> getTasks() {
        final GetTasksResponse tasksResponse = marathon.getTasks();
        final Collection<Task> tasks = tasksResponse.getTasks();
        return tasks;
    }

    /**
     * 获取指定APP下的所有任务
     * @param appid
     */
    public Collection<Task> getTasks(String appid){
        final GetAppTasksResponse tasksResponse = marathon.getAppTasks(appid);
        final Collection<Task> tasks = tasksResponse.getTasks();
        return tasks;
    }

    /**
     * 删除所有Apps
     * @return
     */
    public boolean deleteAllApps() {
        final GetAppsResponse appsResponse = marathon.getApps();
        final List<VersionedApp> apps = appsResponse.getApps();
        for (VersionedApp app : apps) {
            marathon.deleteApp(app.getId());
        }
        return true;
    }

    public Group getGroup(String groupName){
        final Group group = marathon.getGroup(groupName);
        return group;
    }

    public boolean cancelDeployment(String s){
        marathon.cancelDeployment(s);
        return true;
    }

    public void updateGroup(){
//        marathon.updateGroup();
    }

    /**
     * 重启App
     * @param appid
     * @param force
     * @return
     */
    public String restartApp(final String appid, final boolean force){
        final Result result = marathon.restartApp(appid, force);
        return result.getDeploymentId();
    }

    /**
     * 更新App信息
     * @param appId
     * @param app
     * @param force
     * @return
     */
    public String updateApp(final String appId, App app, boolean force){
        final Result result = marathon.updateApp(appId, app, force);
        return result.getDeploymentId();
    }

    /**
     * 查看服务器信息
     * @return
     */
    public GetServerInfoResponse getServerInfo(){
        final GetServerInfoResponse response = marathon.getServerInfo();
        return response;
    }

    /**
     * 取消部署并回滚
     * @param id
     * @return
     */
    public String cancelDeploymentAndRollback(String id){
        final Result result = marathon.cancelDeploymentAndRollback(id);
        return result.getDeploymentId();
    }

    /**
     * 创建App
     * @param app
     * @return
     */
    public VersionedApp createApp(App app){
        try {
            return marathon.createApp(app);
        }catch (Exception e){
            log.error("App已存在", e);
        }
        return null;
    }

    /**
     * 创建Group
     * @param group
     * @return
     */
    public String createGroup(Group group){
        final Result result = marathon.createGroup(group);
        return result.getDeploymentId();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 5,685评论 0 3
  • springboot 概述 SpringBoot能够快速开发,简化部署,适用于微服务 参考嘟嘟大神SpringBo...
    一纸砚白阅读 10,837评论 2 20
  • 凤姐在初中群里发了一句感慨,"哎,我这辈子还没初恋过呢"。 我以迅雷不及掩耳盗铃之势回复,"凤姐,你虽然没有初恋过...
    风波力阅读 1,118评论 0 0
  • 与老丈人的斗争心法 序言 此斗争心法,攫取于以往之斗争经验,抽丝剥茧,归纳总结。其目的在于开即来之斗争胜利,并留于...
    小马宇阳阅读 4,258评论 0 0
  • 商业问题11:你在面对富有挑战的商业局面或商业决策时,无法全神贯注。 金刚解药:每天花些时间将你的意识平静地安住在...
    柔光宝宝阅读 689评论 0 0