receiver
<p>[TOC]</p>
<h3>HTTP 接口列表</h3>
<ul>
<li><code>Join</code></li>
<li><code>Query</code></li>
<li><code>Data</code></li>
<li><code>Quit</code></li>
</ul>
<h3><code>Join</code> HTTP 接口</h3>
<h5>简要描述</h5>
<ul>
<li>Exporter 注册接口</li>
<li>先查询 meta,存在则返回元信息和进度信息,不存在则创建初始消息</li>
<li>无论已经存在与否,都调用 resolver mgr 接口尝试启动 一个 resolver</li>
<li>mgr 处会同样访问 meta,来对不同情况做出反应,始终保持 exporter 有且仅有一个 resolver 与之对应。</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>http://localhost:8080/exporter/join</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>GET</li>
</ul>
<h5>接口参数介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">exporter_tag</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>exporter 唯一标识</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<pre><code class="language-json"> {
"ok": true,
"msg": "resolver-exporter-1",
"current_progress": {
"current_n": 10,
"current_file_id": 0,
"current_day": "2023-02-02",
},
}</code></pre>
<h5>返回值介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">OK</td>
<td style="text-align: left;">bool</td>
<td>是否注册成功</td>
</tr>
<tr>
<td style="text-align: left;">Msg</td>
<td style="text-align: left;">string</td>
<td>返回注册成功对应的 resolver tag,或者注册失败的错误信息</td>
</tr>
<tr>
<td style="text-align: left;">CurrentProgress</td>
<td style="text-align: left;"><a href="https://github.com/BitTraceProject/BitTrace-Types/blob/main/pkg/protocol/receiver_http.go">protocol.ReceiverProgress</a></td>
<td>如果存在历史进度,则返回,否则为该字段为空</td>
</tr>
</tbody>
</table>
<h5>注意事项</h5>
<ul>
<li>无</li>
</ul>
<h3><code>Query</code> HTTP 接口</h3>
<h5>简要描述</h5>
<ul>
<li>与 <code>Join</code> 接口类似</li>
<li>只查询和返回数据,不更新数据,不与 resolver 交互</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>http://localhost:8080/exporter/query</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>GET</li>
</ul>
<h5>接口参数介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">exporter_tag</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>exporter 唯一标识</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<pre><code class="language-json"> {
"ok": true,
"msg": "resolver-exporter-1",
"current_progress": {
"current_n": 10,
"current_file_id": 0,
"current_day": "2023-02-02",
},
}</code></pre>
<h5>返回值介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">OK</td>
<td style="text-align: left;">bool</td>
<td>是否注册成功</td>
</tr>
<tr>
<td style="text-align: left;">Msg</td>
<td style="text-align: left;">string</td>
<td>返回注册成功对应的 resolver tag,或者注册失败的错误信息</td>
</tr>
<tr>
<td style="text-align: left;">CurrentProgress</td>
<td style="text-align: left;"><a href="https://github.com/BitTraceProject/BitTrace-Types/blob/main/pkg/protocol/receiver_http.go">protocol.ReceiverProgress</a></td>
<td>如果存在历史进度,则返回,否则为该字段为空</td>
</tr>
</tbody>
</table>
<h5>注意事项</h5>
<ul>
<li>无</li>
</ul>
<h3><code>Data</code> HTTP 接口</h3>
<h5>简要描述</h5>
<ul>
<li>先解码和反序列化出数据</li>
<li>然后根据 tag 查询 exporter 是否已注册</li>
<li>已注册,则将数据包装成 <code>Message</code> 放入 MQ</li>
<li>最后更新最新的进度信息</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>http://localhost:8080/exporter/data</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>POST</li>
</ul>
<h5>接口参数介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">exporter_tag</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>exporter 唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">data_package</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;"><a href="https://github.com/BitTraceProject/BitTrace-Types/blob/main/pkg/protocol/receiver_http.go">protocol.ReceiverDataPackage</a></td>
<td>数据包裹</td>
</tr>
<tr>
<td style="text-align: left;">current_progress</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;"><a href="https://github.com/BitTraceProject/BitTrace-Types/blob/main/pkg/protocol/receiver_http.go">protocol.ReceiverProgress</a></td>
<td>当前上报进度</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<pre><code class="language-json"> {
"ok": true,
}</code></pre>
<h5>返回值介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">OK</td>
<td style="text-align: left;">bool</td>
<td>是否上报成功</td>
</tr>
</tbody>
</table>
<h5>注意事项</h5>
<ul>
<li>更新进度时,无论更新是否成功,都会返回 true。</li>
<li>因为上述过程中,<code>Message</code> 已经被成功放入 MQ 了,这也说明,Meta 的进度信息一定不是完全正确的,可能会延后,导致 MQ 中消息重复。</li>
<li>这在 resolver 中处理时需要注意。</li>
</ul>
<h3><code>Quit</code> HTTP 接口</h3>
<h5>简要描述</h5>
<ul>
<li>Exporter 退出接口</li>
<li>支持设置 <code>lazy_quit</code> 参数,使得 resolver 在处理完所有 mq 的消息后才异步地退出</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>http://localhost:8080/exporter/quit</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>GET</li>
</ul>
<h5>接口参数介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">exporter_tag</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>exporter 唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">lazy_quit</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">bool</td>
<td>resolver 是否异步退出,默认 false</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<pre><code class="language-json"> {
"ok": true,
"msg": "resolver-exporter-1",
}</code></pre>
<h5>返回值介绍</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">OK</td>
<td style="text-align: left;">bool</td>
<td>是否退出成功</td>
</tr>
<tr>
<td style="text-align: left;">Msg</td>
<td style="text-align: left;">string</td>
<td>返回对应的 resolver tag,或者退出失败的错误信息</td>
</tr>
</tbody>
</table>
<h5>注意事项</h5>
<ul>
<li><code>lazy_quit</code> 参数会传递给 resolver mgr 来真正地控制。</li>
</ul>