在所有适配器中,我们需要引入基础适配器Adapter并使用其提供的继承方法。命名空间为:use Domain\Datahub\Instance\Adapter\Adapter;。
使用$this->getLogStorage()->insertOne([$content], $status);进行日志记录。其中,$content为日志内容(数组形式),$status为日志错误类型。如果$status为错误,需要引入命名空间LogStatus,调用方法为$this->getLogStorage()->insertOne([$content], LogStatus::RECORD);。
在写入调度者时,需要从数据管理中获取一条数据,并根据配置的metaData中的operation参数。代码如下:
$operation = null;
if (isset($this->metaData['operation'])) {
$operation = $this->metaData['operation'];
}
$data = $this->getDataStorage()->fetch($operation);
其中,$this->metaData保存了请求调度者和写入调度者的配置参数,包括对应的$api接口地址。
此方法主要用于将请求调度者和写入调度者的配置参数转换为接口所需的参数。可以直接调用父类(Adapter)的generateRequestParams方法。代码如下:
$request = $this->generateRequestParams();
$request = $this->generateRequestParams($data);
在实际过程中,我们可以使用以下代码:
try {
$request = $this->generateRequestParams($data);
} catch (\Throwable $th) {
$this->getLogStorage()->insertOne(['text' => LogMessage::DISPATCH_SOURCE_FAIL, 'response' => $th->getMessage(), 'data' => $data], LogStatus::ERROR);
$this->getDataStorage()->setFetchStatus(DataStatus::CONTINUE);
return $this->dispatch();
}
使用上一步得到的$request,向请求队列中插入任务数据,并获取任务ID。代码如下:
$jobId = $this->getAsynSourceJobStorage()->insertOne($this->metaData['api'], $request);
调用父类的asynSourceJob方法,$time表示多少秒后执行队列任务(0表示立即执行),$jobId表示任务ID。代码如下:
$this->asynSourceJob($time, $jobId);
调用Adapter父类的asynTargetJob方法,$this->metaData['api']表示方案设置的接口地址,$request表示请求参数,$this->getDataStorage()->ids表示数据ID,$this->getDataStorage()->dataRange表示数据范围。代码如下:
$jobId = $this->getAsynTargetJobStorage()->insertOne($this->metaData['api'], $request, $this->getDataStorage()->ids, $this->getDataStorage()->dataRange);
调用getDataStorage中的setFetchStatus方法,标记数据状态为队列中。$jobId表示任务ID。代码如下:
$this->getDataStorage()->setFetchStatus(DataStatus::QUEUE, null, null, new \MongoDB\BSON\ObjectId($jobId));
调用父类的asynTargetJob方法,$time表示多少秒后执行队列任务(0表示立即执行),$jobId表示任务ID。代码如下:
$this->asynTargetJob(round($this->asynTimes), $jobId);
在查询适配器中,如果得到正确的结果集,调用getDataStorage中的insertOne方法,将数据写入数据管理。$id为主键字段,$number为业务编码字段,$response表示接口返回的结果集,$jobId表示任务ID。代码如下:
$this->getDataStorage()->insertOne($id, $number, $response, false, $jobId);
reQueue在处理响应时,如果响应结果不正确,调用父类的reQueue方法进行任务重试。代码如下:
$this->reQueue();
在适配器中,我们定义了一个handleError方法用于处理异常。代码如下:
public function handleError($response, $jobId = null)
{
$throw = new HuidinhuoThrowable($this);
$throw->handle($jobId, $response);
$this->getAsynSourceJobStorage()->updateResponse($jobId, DataStatus::ERROR, $response, 0, $this->active);
$this->getLogStorage()->insertOne(['text' => LogMessage::INVOKE_FAIL, 'response' => $response], LogStatus::ERROR);
return $response;
}
| 2021-08-12 05:54:08 | |
| 2021-02-22 06:00:07 | |
| 2021-08-15 09:17:02 | |
| 2021-04-06 02:30:21 | |
| 2021-03-26 12:57:06 | |
| 2021-02-14 20:50:51 | |
| 2021-09-07 05:40:20 | |
| 2021-01-06 09:19:29 | |
| 2021-07-30 06:48:03 | |
| 2021-06-14 13:49:05 | |
| 2021-04-20 02:53:21 | |
| 2021-01-21 20:39:10 | |
| 2021-08-10 09:09:15 | |
| 2021-06-06 17:25:09 | |
| 2021-04-08 20:12:44 | |
| 2021-07-27 10:53:26 | |
| 2021-04-20 04:30:25 | |
| 2021-03-18 22:40:20 | |
| 2021-09-27 05:58:18 | |
| 2021-06-18 01:54:25 | |
| 2024-03-21 10:47:11 | |
| 2024-03-19 11:22:01 | |
| 2024-03-19 11:17:30 | |
| 2024-03-19 10:09:38 | |
| 2024-03-19 09:11:30 |
卢剑航 13760755942
数据集成专家 拥有十多年丰富的经验,擅长ERP、MES、数据中台、营销云中台等集成。他能够根据客户需求,为其提供一站式集成解决方案,帮助企业快速实现各类系统数据集成服务。
胡秀丛 15813570600
数据集成顾问 项目总监 她以卓越的数据集成专长,精通ERP、MES系统,以及数据中台的构建与优化。通过创新的一站式解决方案,她助力企业实现数据的无缝对接,提升业务流程效率,确保信息流通无障碍,为企业的数字化转型提供强有力的支持。
何海波 18175716035
数据集成顾问 轻易云的技术专家,拥有丰富的数据集成规划经验。他能够为客户提供专业、全面的数据集成规划方案,熟练掌握多种集成技术和工具,帮助企业在数据集成领域得到长远发展。