首页 > 解决方案 > Fiware Orion 批量复制

问题描述

我正在使用 APPEND_STRICT,但无法理解某个概念。

例如,我在 Fiware Orion 中有一个实体(已经创建),并且想使用 APEND_STRINCT(v2/op/update)批量创建 1000 个实体。

在 1000 个实体中有 1 个重复(我提到的一个实体已经在 Orion 中)。

这是正确的吗,Orion 将抛出错误 422,而没有任何关于已经存在的实体的 id 的信息,错误谈论实体的属性(我理解为什么它是 APPEND_STRICT 的概念),但显示它真的会有所帮助。

另一部分是如果重复的实体位于位置 400 则 Orion 发送错误但继续写入剩余的实体,这真的很难管理,因为我不知道何时完成全部写入并且必须在 Orion 仍然显示一些响应时在后台处理它们。

我的假设是否正确,可以采取一些措施来避免这种情况,这是我没有注意到的。

谢谢。

编辑

错误信息:

{ error: 'Unprocessable',
    description: 'one or more of the attributes in the request already exist: 
    [ family, serialNumber, refSortingType, description, refType, storedWasteOrigin, location, address, fillingLevel, cargoWeight, temperature, methaneConcentration, regulation, responsible, owner, dateServiceStarted, dateLastEmptying, nextActuationDeadline, actuationHours, openingHours, dateLastCleaning, nextCleaningDeadline, refDepositPointIsle, status, color, image, annotations, areaServed, dateModified, refDevice ]' } } }

示例请求:

{ method: 'POST',
 headers:
  { 'Content-Type': 'application/json',
    'Fiware-Service': 'waste4think',
    'Fiware-ServicePath': '/d',
    'X-Auth-Token': 'DssfKZe82e1dyJof416EmrQPdFQ3QK1' },
 uri: 'http://localhost:1026/v2/op/update',
 body: { actionType: 'APPEND_STRICT', entities: [Array] }

     {"actionType":"APPEND_STRICT","entities":[{"id":"xxx","type":"xxx","family":{"value":"Agent","type":"String","metadata":{}},"serialNumber":{"value":"","type":"String","metadata":{}},"refSortingType":{"value":"SortingType:2","type":"String","metadata":{}},"description":{"value":"","type":"String","metadata":{}},"refType":{"value":"DepositPointType:0","type":"String","metadata":{}},"storedWasteOrigin":{"value":"","type":"String","metadata":{}},"location":{"value":{"type":"Point","coordinates":[xxx]},"type":"geo:json"},"address":{"value":"xxxxx.","type":"String","metadata":{}},"fillingLevel":{"value":0,"type":"Float","metadata":{"unit":{"value":"C62","type":"String"}}},"cargoWeight":{"value":0,"type":"Float","metadata":{"unit":{"value":"KGM","type":"String"}}},"temperature":{"value":0,"type":"Float","metadata":{"unit":{"value":"CEL","type":"String"}}},"methaneConcentration":{"value":0,"type":"Float","metadata":{"unit":{"value":"59","type":"String"}}},"regulation":{"value":"Municipal association","type":"String","metadata":{}},"responsible":{"value":"","type":"String","metadata":{}},"owner":{"value":"xxx","type":"String","metadata":{}},"dateServiceStarted":{"value":"","type":"String","metadata":{}},"dateLastEmptying":{"value":"","type":"String","metadata":{}},"nextActuationDeadline":{"value":"","type":"String","metadata":{}},"actuationHours":{"value":[],"type":"List","metadata":{}},"openingHours":{"value":[],"type":"List","metadata":{}},"dateLastCleaning":{"value":"","type":"String","metadata":{}},"nextCleaningDeadline":{"value":"","type":"String","metadata":{}},"refDepositPointIsle":{"value":"","type":"String","metadata":{}},"status":{"value":"ok","type":"String","metadata":{}},"color":{"value":"","type":"String","metadata":{}},"image":{"value":"","type":"String","metadata":{}},"annotations":{"value":"","type":"String","metadata":{}},"areaServed":{"value":"","type":"String","metadata":{}},"dateModified":{"value":"","type":"String","metadata":{}},"refDevice":{"value":"","type":"String","metadata":{}}}]}

至于请求,我将帖子部分和正文部分分开。如您所见,错误消息无法知道是什么实体导致了这种情况

标签: fiwarefiware-orion

解决方案


我认为功能如您所描述。Orion 使用已存在但不属于哪个实体的属性列表进行响应。像这样的回应可能更有用:

'one or more of the attributes in the request already exist: 
   entity23: [ family, serialNumber], entity 42: [refSortingType, description]'

有一些上限(例如多达 20 个实体)以排除太大的响应。

如果您认为实现类似的东西可能很有趣,请在 Orion 存储库中创建一个关于它的新问题,拜托。

一些额外的评论:

  • APPEND_STRICT 已弃用。正确的关键字是appendStrict.
  • 关于"Orion send error but continue to write remaining entities, this is really hard to manage because I cannot know when a total write is done and have to show some response while Orion still works on them in the background". Orion 在完成处理请求中的整个批次之前不会响应POST /v2/op/entity。因此,您的 REST 客户端可以确保在收到响应时,所有内容都已处理(尽管该处理可能涉及由于某些实体中的重复属性而导致的错误,正如我们一直在讨论的那样)。你有没有经历过不同的行为?在那种情况下,你是怎么得到它的?(猎户座的行为方式可能是一个错误,我想知道以便调试它)。

推荐阅读