簡體   English   中英

創建訂閱后立即推送舊通知

[英]Old notifications pushed immediately when subscription is created

我正在使用Fiware Orion Context Broker 0.20版。 我注意到,當我創建上下文訂閱時,我提供的端點會立即收到有關在創建訂閱之前發生的相應上下文元素更改的通知。

為了澄清:(注意:我在干凈的數據庫中使用了這些步驟)

  1. 我從測試包/usr/share/contextBroker/tests/accumulator-server.py 1028 /accumulate on啟動了累加器

  2. 使用http://localhost:1026/v1/updateContext創建了一個上下文元素

{
    "contextElements": [
        {
            "type": "Room",
            "isPattern": "false",
            "id": "Room1",
            "attributes": [
            {
                "name": "temperature",
                "value": "20"
            }
            ]
        }
    ],
    "updateAction": "APPEND"
}
  1. 然后,我使用http://localhost:1026/v1/subscribeContext創建了訂閱
{
    "entities": [
        {
            "type": "Room",
            "isPattern": "true",
            "id": ".*"
        }
    ],
    "attributes": [
        "temperature"
    ],
    "reference": "http://localhost:1028/accumulate",
    "duration": "P1M",
    "notifyConditions": [
        {
            "type": "ONCHANGE",
            "condValues": [
                "temperature"
            ]
        }
    ],
    "throttling": "PT5S"
}
  1. 我立即在累加器中收到以下內容
POST http://localhost:1028/accumulate
Content-Length: 472
User-Agent: orion/0.20.0 libcurl/7.19.7
Host: localhost:1028
Accept: application/xml, application/json
Content-Type: application/json

{
  "subscriptionId" : "55521671985dc3976b879780",
  "originator" : "localhost",
  "contextResponses" : [
    {
      "contextElement" : {
        "type" : "Room",
        "isPattern" : "false",
        "id" : "Room1",
        "attributes" : [
          {
            "name" : "temperature",
            "type" : "",
            "value" : "20"
          }
        ]
      },
      "statusCode" : {
        "code" : "200",
        "reasonPhrase" : "OK"
      }
    }
  ]
}

此外,如果我在添加訂閱之前創建了多個contextElements,它們都是通知中contextResponses一部分。

對於我的用例,此行為是不希望的。 訂閱是非常動態的(它們在應用程序的整個生命周期中經常出現或消失),我不希望每次創建訂閱時都獲得全部歷史記錄。 從T創建訂閱的那一刻起,我只希望收到有關更改的通知。 (不是歷史)

我是否忽略了文檔中的某些內容,是否可以通過更改訂閱請求的內容來解決此問題? 如果不是,這是上下文代理普遍接受的行為還是僅僅是一個簡單的錯誤?

手冊中所述這是預期的行為:

您可能想知道,如果您實際上沒有進行任何更新,為什么accumulator-server.py會收到此消息。 這是因為Orion上下文代理將從“不存在的訂閱”到“已訂閱”的轉換視為更改。

我們知道,對於某些用例,這並不方便。 但是,以相反的方式行事會破壞另一種用例,這些用例在開始獲取與實際更改相對應的通知之前需要了解“財務狀態”。 使每個人都滿意的最佳解決方案是使它可配置,以便每個客戶端可以選擇自己喜歡的東西。 該功能當前在我們的路線圖中(請參閱github.com中的此問題 )。

盡管這是在Orion中實現的,但在您的情況下,可能的解決方法是忽略第一個收到的屬於訂閱的nofitication(您可以通過通知有效負載中的subscriptionId字段標識一個通知所屬的subscriptionId )。 以下所有屬於該訂閱的通知將與實際更改相對應。

編輯:避免初始通知的可能性已在Orion最終實現。 詳細信息在文檔的此部分 它現在位於master分支中(因此,如果您使用fiware/orion:latest您將獲得它),並將包含在下一個Orion版本(2.2.0)中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM