ApacheMesos master 和 client 之间通信的独立服务器

An independent server communicating between ApacheMesos master and client

全部:

我在一个独立的服务器上工作,它应该能够通过 HTTP POST 请求与 Mesos master&client 通信。
我设置了 Jersey REST 服务器。我最初的计划是使用 JSON/XML 来映射实体,因为这被广泛使用。

但是,我发现了一些通信兼容性问题,

  1. 我从 *.proto 文件生成 Java 类。 我尝试通过 REST(使用 JSON)调用创建一个 Event.Offers 对象,但出现了一些数据流反序列化错误。 我认为这是因为生成的 类 结构复杂。它们不是 POJO 的,例如他们没有 public 构造函数。

  2. "src/cli/execute.cpp" 将 "ContentType" 设置为 "PROTOBUF"。
    我认为在大多数情况下,Mesos 内部使用 "PROTOBUF",而不是 JSON。

所以,鉴于上述问题,
我应该用 ProtocolBuffer 实现我的服务器,这是更好的方法吗?我认为这将与 Mesos 完全兼容...... 或者我应该尝试在 Mesos 中将 PROTOBUF 转换为 JSON 吗?

有哪位好心人可以给点建议吗?我对这一点感到困惑。

非常感谢

你应该使用 protobuf。

Protobuf 只是 Mesos 定义其 API 的一种方式。 Mesos 可以处理二进制序列化的 protobuf 请求或 JSONs。 Mesos 在版本 2 中使用 protobuf(将升级到 3)并且没有从 protobuf v2 到 JSON 的标准序列化并且 Mesos 不完全支持 v3 JSON 映射,请参阅 MESOS-5995 .理论上您可以手动创建 JSON 但使用 protobuf 保证您将使用正确版本的 API 并为您处理序列化。

In documentation 有一些交流的例子。如果没有适当的 headers Mesos 将拒绝请求。

Similar to the Scheduler and Executor HTTP APIs, the operator endpoints only accept HTTP POST requests. The request body should be encoded in JSON (Content-Type: application/json) or Protobuf (Content-Type: application/x-protobuf).

Here 您可以找到在不同用例中与 Mesos 通信的示例库:调度器、执行器、操作器。

Here 您可以找到我使用 JSONs 的教育用途调度程序。它是用 Go 编写的,并试图将所有内容保存在一个地方,只依赖于 Protobuf。