步骤:

1、访问marathon下载源码地址为 https://github.com/mesosphere/marathon-client

2、修改Marathon类 此处多添加一个GET ping 的方法

===============================================================================================

package mesosphere.marathon.client;

import java.util.List;

import javax.inject.Named;

import mesosphere.marathon.client.model.v2.App;
import mesosphere.marathon.client.model.v2.DeleteAppTaskResponse;
import mesosphere.marathon.client.model.v2.DeleteAppTasksResponse;
import mesosphere.marathon.client.model.v2.Deployment;
import mesosphere.marathon.client.model.v2.GetAppResponse;
import mesosphere.marathon.client.model.v2.GetAppTasksResponse;
import mesosphere.marathon.client.model.v2.GetAppsResponse;
import mesosphere.marathon.client.model.v2.GetQueuesResponse;
import mesosphere.marathon.client.model.v2.GetServerInfoResponse;
import mesosphere.marathon.client.model.v2.GetTasksResponse;
import mesosphere.marathon.client.model.v2.Group;
import mesosphere.marathon.client.model.v2.Result;
import mesosphere.marathon.client.utils.MarathonException;
import feign.RequestLine;

public interface Marathon {
//ping IP
@RequestLine("GET /ping")
void ping();
    // Apps
@RequestLine("GET /v2/apps")
GetAppsResponse getApps();

@RequestLine("GET /v2/apps/{id}")
GetAppResponse getApp(@Named("id") String id) throws MarathonException;

@RequestLine("GET /v2/apps/{id}/tasks")
GetAppTasksResponse getAppTasks(@Named("id") String id);

@RequestLine("POST /v2/apps/{app_id}/restart")
Result reStartApp(@Named("app_id") String app_id) throws MarathonException;

@RequestLine("GET /v2/tasks")
GetTasksResponse getTasks();

@RequestLine("POST /v2/apps")
App createApp(App app) throws MarathonException;

@RequestLine("PUT /v2/apps/{app_id}")
void updateApp(@Named("app_id") String appId, App app) throws MarathonException;

@RequestLine("PUT /v2/apps/{app_id}?force=true")
void forceUpdateApp(@Named("app_id") String appId, App app) throws MarathonException;

@RequestLine("DELETE /v2/apps/{id}")
Result deleteApp(@Named("id") String id) throws MarathonException;

@RequestLine("DELETE /v2/apps/{id}?force=true")
Result forceDeleteApp(@Named("id") String id) throws MarathonException;

@RequestLine("DELETE /v2/apps/{app_id}/tasks?host={host}&scale={scale}")
DeleteAppTasksResponse deleteAppTasks(@Named("app_id") String appId,
@Named("host") String host, @Named("scale") String scale);

@RequestLine("DELETE /v2/apps/{app_id}/tasks/{task_id}?scale={scale}")
DeleteAppTaskResponse deleteAppTask(@Named("app_id") String appId,
@Named("task_id") String taskId, @Named("scale") String scale);

// Groups
@RequestLine("POST /v2/groups")
Result createGroup(Group group) throws MarathonException;

@RequestLine("PUT /v2/groups/{id}")
Result updateGroup(@Named("id") String id, Group group) throws MarathonException;

@RequestLine("PUT /v2/groups/{id}?force=true")
Result forceUpdateGroup(@Named("id") String id, Group group) throws MarathonException;

@RequestLine("DELETE /v2/groups/{id}")
Result deleteGroup(@Named("id") String id) throws MarathonException;

@RequestLine("DELETE /v2/groups/{id}?force=true")
Result forceDeleteGroup(@Named("id") String id) throws MarathonException;

@RequestLine("GET /v2/groups/{id}")
Group getGroup(@Named("id") String id) throws MarathonException;

// Tasks

// Deployments
@RequestLine("GET /v2/deployments")
List<Deployment> getDeployments();

@RequestLine("DELETE /v2/deployments/{deploymentId}")
void cancelDeploymentAndRollback(@Named("deploymentId") String id);

@RequestLine("DELETE /v2/deployments/{deploymentId}?force=true")
void cancelDeployment(@Named("deploymentId") String id);

// Event Subscriptions

// Queue
@RequestLine("GET /v2/queue")
GetQueuesResponse getQueues() throws MarathonException;
    // Server Info
    @RequestLine("GET /v2/info")
    GetServerInfoResponse getServerInfo();

// Miscellaneous
}

=============================================================================================

3、修改MarathonClient类 重载方法getInstance();

package mesosphere.marathon.client;

import mesosphere.marathon.client.utils.MarathonException;
import mesosphere.marathon.client.utils.ModelUtils;
import feign.Feign;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.Response;
import feign.codec.ErrorDecoder;
import feign.gson.GsonDecoder;
import feign.gson.GsonEncoder;
import java.util.List;
import java.util.Map;

public class MarathonClient {
static class MarathonHeadersInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
template.header("Accept", "application/json");
template.header("Content-Type", "application/json");
}
}

static class MarathonErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
return new MarathonException(response.status(), response.reason());
}
}
public static Marathon getInstance(String endpoint) {
GsonDecoder decoder = new GsonDecoder(ModelUtils.GSON);
GsonEncoder encoder = new GsonEncoder(ModelUtils.GSON);
return Feign.builder().encoder(encoder).decoder(decoder)
.errorDecoder(new MarathonErrorDecoder())
.requestInterceptor(new MarathonHeadersInterceptor())
.target(Marathon.class, endpoint);
/*marathon.ping();
return marathon;*/
}
public static Marathon getInstance(String area,Map<String,List<String>> urlConfs) {
Marathon marathon = null;
GsonDecoder decoder = new GsonDecoder(ModelUtils.GSON);
GsonEncoder encoder = new GsonEncoder(ModelUtils.GSON);
//String []marathonUrl=endpoint.split(",");

List<String> urls=urlConfs.get(area);
for(int i=0;i<urls.size();i++){
//初始化实例
marathon= Feign.builder().encoder(encoder).decoder(decoder)
.errorDecoder(new MarathonErrorDecoder())
.requestInterceptor(new MarathonHeadersInterceptor())
.target(Marathon.class, urls.get(i));
try{
   //测试所选择的url是否可以ping通
marathon.ping();
return marathon;
}catch(Exception e){
System.out.println("连接url="+urls.get(i)+"异常!");
System.out.println("错误信息:"+e.getMessage());
continue;
}
}

System.out.println("连接marathon集群异常!");
return null;
}

public static String getEnableUrl(String area,Map<String,List<String>> urlConfs){
String url="";
Marathon marathon = null;
GsonDecoder decoder = new GsonDecoder(ModelUtils.GSON);
GsonEncoder encoder = new GsonEncoder(ModelUtils.GSON);
//String []marathonUrl=endpoint.split(",");
List<String> urls=urlConfs.get(area);

for(int i=0;i<urls.size();i++){
url=urls.get(i);
//初始化实例
marathon= Feign.builder().encoder(encoder).decoder(decoder)
.errorDecoder(new MarathonErrorDecoder())
.requestInterceptor(new MarathonHeadersInterceptor())
.target(Marathon.class, url);
try{
   //测试所选择的url是否可以ping通
marathon.ping();
return url;
}catch(Exception e){
System.out.println("连接url="+url+"异常!");
System.out.println("错误信息:"+e.getMessage());
continue;
}
}
return null;
}

}

4、test

public class Test {
public static void main(String[] args){

String url = "http://ip:端口号";
Map<String,List<String>> urlConfs = new HashMap<String, List<String>>();
List<String> list = new ArrayList<String>();
list.add(url);
urlConfs.put("1", list);
Marathon marathon = MarathonClient.getInstance("1", urlConfs);
List<Deployment> list3 = marathon.getDeployments();
System.out.println(ModelUtils.toString(list3));
for(Deployment dep : list3){
System.out.println(dep.toString());
marathon.cancelDeployment(dep.getId());
}

}

5、所需jar包

feign.jar和inject.jar

文档中有可下载

调用marathon rest API相关推荐

  1. api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解

    本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法.分享给大家供大家参考,具体如下: 新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. A ...

  2. C#调用Win32 的API函数--User32.dll

    Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果. using System; ...

  3. python有道api-python 调用有道api接口的方法

    初学python ,研究了几天,写了一个python 调用 有道api接口程序 效果看下图: 申明:代码仅供和我一样的初学者学习交流 申请很简单的 ps:审核不用花时间的,请勿滥用!! #-*- co ...

  4. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  5. python如何实现别人调用自己的API

    5_python如何实现别人调用自己的API(5-20181224) 参考别人的API接口的形式 参考别人的API接口的形式 https://docs.open.alipay.com/api_1/al ...

  6. C#调用百度地图 api

    转  http://blog.csdn.net/kkkkkxiaofei/article/details/8663377 这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不 ...

  7. 【c#】Form调用百度地图api攻略及常见问题

    首先,在Form中调用百度地图api,我们需要使用webbrowser控件,这个在前面的文章中已经讲过了,可以参照(http://blog.csdn.net/buptgshengod/article/ ...

  8. python调用系统api_Python调用系统底层API播放wav文件的方法

    本文实例讲述了Python调用系统底层API播放wav文件的方法.分享给大家供大家参考,具体如下: 这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件. 具体代码如下 ...

  9. C#调用百度地图API入门解决BMap未定义问题

    本文主要是最近帮助好友研究JavaScript的百度地图API,同时显示到C# Winform界面.同时遇到了BMap未定义的错误(BMap is not defined)及解决方法.以前写过基于An ...

最新文章

  1. PTA 基础编程题目集 7-19 支票面额 C语言
  2. 一个UI布局框架,以最少的代码实现UI设置及布局控制
  3. iOS 之 事件响应者链
  4. 即将到截止日期,Frontiers期刊向您邀稿啦!脑机接口领域
  5. go语言任意代码执行漏洞 cve-2018-6574
  6. python3项目-30 个惊艳的Python开源项目
  7. PHP 邮件发送系统
  8. 系统搜索功能不能使用,弹出“无法找到运行搜索助理需要的一个文件”
  9. 开发者建站免费.或者.收费空间
  10. junit的使用说明
  11. 从.Net到Java学习第四篇——spring boot+redis
  12. bigdecimal 平均数_MapReduce实例-必须用Combine--求平均数
  13. github mac 添加 ssh_计算机专业MAC操作技巧(二)
  14. error: Your local changes to the following files would be overwritten by merge:
  15. 前端优化-Img与background
  16. python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)
  17. 数学建模大赛准备方法及资源分享
  18. ubuntu安装及使用笔记
  19. 企业如何做好品牌推广工作?
  20. 安装 emoji 字体

热门文章

  1. steamui.dll加载失败怎么解决?没有找到Steamui.Dll修复方法
  2. 王者荣耀扫码登录教程,扫码登录王者荣耀怎么弄?
  3. [企业权限管理项目](二)环境搭建
  4. cocos2d-x公开课视频 (感谢 无脑码农和龙灵修)
  5. Java项目:教师资格证报名系统(java+SpringBoot+vue+maven+mysql+elementui)
  6. centos换163(网易)源
  7. 易语言路由器服务器,无线路由器一键设置工具,制作过程,成品。
  8. mysql guanwnag_Error while deserializing binlog event at offset
  9. 洛谷P3354 [IOI2005]Riv 河流——“承诺”DP
  10. VMware虚拟机解决空间不足,增加磁盘空间(磁盘扩容)