Проблема с уведомлением о подписке на контекстный брокер Fiware Orion

Я использую брокер контекста orion GE image orion-psb-image-R5.4 версии 1.7.0, и я зарегистрировал в нем объект устройства, затем я реализовал в своем raspberry pi простой серверный скрипт python, который прослушивает любое входящее сообщение и печатает это в журналах Пи. затем я отправил сообщение о подписке контекстному брокеру, чтобы позволить моему Raspberry Pi подписаться на соответствующий объект в контекстном брокере. Проблема в том, что всякий раз, когда я обновляю атрибуты условия в сущности в брокере контекста, они должны запускать уведомление для Raspberry Pi, а затем серверный скрипт в PI выводит уведомление в журналы Pi. Но что на самом деле происходит, так это то, что брокер контекста может запускать уведомление несколько раз, а затем внезапно прекращает отправку любого уведомления, когда к атрибуту условия применяется какое-либо дополнительное изменение, и при каждой попытке я получаю статус подписки в брокере контекста и я обнаружил, что произошла ошибка, указанная атрибутом lastfailure, который дает мне время моей последней неудачной попытки. Я думал, что проблема может заключаться в подключении к моему Pi или даже в самом скрипте сервера, но когда я запускал прямые запросы с моего терминала на Raspberry Pi, он сразу же печатает все сообщения, даже если обновление выполняется из удаленного места. Итак, я пришел к выводу, что проблема определенно связана с брокером контекста и процессом уведомления самой подписки.

Вот мой запрос на подписку:

curl -v contextbrokeraddress:1026/v2/subscriptions -s -S --header "Fiware-Service: XYZ" --header "Fiware-ServicePath: /XYZ" --header 'Content-Type: application/json' \
    -d @- <<EOF
{
  "description": " Try",
  "subject": {
    "entities": [
      {
        "id": "Controller1",
        "type": "Controller"
      }
    ],
    "condition": {
      "attrs": [
        "switch",
        "datashow"

      ]
    }
  },
  "notification": {
    "http": {
      "url": "http://raspberryPiaddress:8080"
    },
    "attrs": [
     "switch",
     "datashow"
    ]
  },
  "expires": "2040-01-01T14:00:00.00Z",
  "throttling": 5
}
EOF

теперь, когда атрибут переключателя обновляется с другим значением, он может запускать уведомление для raspberry pi только в первый раз, но затем терпит неудачу при любых последующих попытках.

это простой скрипт Python, который прослушивает входящие уведомления и выводит их в свои журналы:

import socket

HOST, PORT = '', 8080

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)

while True:

    print "listening on port 8080"

    client_connection, client_address = listen_socket.accept()
    print "notified"
    request = client_connection.recv(1024)
    print request 
    client_connection.close()

И вот как уведомление от контекстного брокера печатается в журналах Pi в его успешные времена:

listening on port 8080
notified
POST / HTTP/1.1
User-Agent: orion/1.7.0 libcurl/7.19.7
Host: raspberryPiaddress:8080
fiware-service: XYZ
Fiware-ServicePath: /XYZ
X-Auth-Token: token
Accept: application/json
Content-length: 208
Content-type: application/json; charset=utf-8
Fiware-Correlator: f48ced60-1069-11e7-b743-fa163e7c4daf
Ngsiv2-AttrsFormat: normalized

{"subscriptionId":"58cd49191e9c000de6ea89c7","data":[{"id":"Controller1","type":"Controller","switch":{"type":"command","value":"OFF","metadata":{}},"datashow":{"type":"string","value":"OFF","metadata":{}}}]}

И когда уведомление не получено ни о каких последующих обновлениях объекта, я проверяю, что это был сбой, получая статус подписки, в котором говорится, что произошел сбой в брокере контекста при отправке уведомления в точное время моей попытки. Это статус, который я получаю, чтобы проверить, что:

[
    {
        "description": " Try",
        "expires": "2040-01-01T14:00:00.00Z",
        "id": "58cd49191e9c000de6ea89c7",
        "notification": {
            "attrs": [
                "switch",
                "datashow"
            ],
            "attrsFormat": "normalized",
            "http": {
                "url": "http://ahmadpi.ddns.net:8080"
            },
            **"lastFailure": "2017-03-24T08:22:23.00Z",**
            "lastNotification": "2017-03-24T08:22:18.00Z",
            "lastSuccess": "2017-03-23T22:09:33.00Z",
            "timesSent": 66
        },
        "status": "failed",
        "subject": {
            "condition": {
                "attrs": [
                    "switch",
                    "datashow"
                ]
            },
            "entities": [
                {
                    "id": "Controller1",
                    "type": "Controller"
                }
            ]
        },
        "throttling": 5
    }
]

теперь проблема, похоже, связана с брокером контекста и тем, как внутри него обрабатываются процессы подписки / уведомления. Теперь я хочу знать, касается ли проблема версии изображения контекстного брокера, которую я использовал, или она касается чего-то еще. Я просто хочу знать, в чем проблема и как с ней справиться, пожалуйста, и большое спасибо.


person ahmad    schedule 24.03.2017    source источник
comment
Есть ли какая-либо трассировка журнала в файле журнала контекстного брокера (обычно /var/log/contextBroker/contextBroker.log) как следствие обновления объекта? В этом случае, пожалуйста, отредактируйте свой вопрос, чтобы включить их. Спасибо!   -  person fgalan    schedule 27.03.2017
comment
Кроме того, отредактируйте свой вопрос, чтобы указать, сколько времени проходит между каждой попыткой обновления. Учитывая, что ваша подписка имеет ограничение на 5 секунд, эта информация актуальна. Спасибо!   -  person fgalan    schedule 27.03.2017
comment
уведомления могут запускаться один или несколько раз, но затем брокер контекста не может отправить дополнительные уведомления. что я заметил до сих пор, так это то, что брокер контекста, вероятно, дает сбой, когда я обновляю атрибут условия до того, как истечет время регулирования, так что брокер контекста полностью выходит из строя в этом случае, и мне нужно перезапустить мой сервер, чтобы снова принимать уведомления. может ли брокер контекста потерпеть неудачу из-за такого отношения @fgalan?   -  person ahmad    schedule 29.03.2017
comment
Я немного сбит с толку, потому что случай, который вы описали в последнем комментарии, не соответствует случаю в вопросе. Я имею в виду, что в вопросе вы упоминаете, что он может запускать уведомление для raspberry pi только в первый раз, но затем терпит неудачу при любых последующих попытках [обновление значения атрибута]. То есть ничего не сказано об обновлении атрибута условия. Пожалуйста, просмотрите свой вопрос и отредактируйте его, чтобы приспособиться к ситуации, которая на самом деле происходит, включая всю необходимую информацию (например, запрос на обновление подписки, трассировки журнала при обновлении атрибута и т. Д.)   -  person fgalan    schedule 29.03.2017
comment
Кроме того, укажите в своем вопросе версию Context Broker, которую вы используете. Обратите внимание, что версии образа (R5.4) недостаточно, так как Context Broker мог быть обновлен после развертывания образа. Запуск contextBroker --version предоставит версию.   -  person fgalan    schedule 29.03.2017
comment
Вы правы, на самом деле ситуация немного изменилась, и я обновлю ее в посте. Я использовал службу NOIP DDNS, которая позволяет моему PI периодически обновлять динамический адрес моего маршрутизатора на сервере DDNS с заданным фиксированным именем хоста для PI, и это был тот случай, когда Orion не отправляет уведомление или отправляет его только один раз. Но когда я использовал статический IP-адрес для PI, несколько уведомлений были получены при любом обновлении, но также внезапно прекратились. Сначала я подумал, что это может быть связано с таким быстрым обновлением атрибута условия, но это не серьезная причина. Это явно моя текущая ситуация.   -  person ahmad    schedule 30.03.2017
comment
Кстати, я использовал Orion версии 1.7.0. Возможно, Orion не смог правильно разрешить IP-адрес в первом случае с помощью службы DDNS, но я вижу, что во втором случае произошло небольшое изменение. Когда я дал маршрутизатору, подключенному к PI, статический IP-адрес, и PI принимал последовательные уведомления, в отличие от раньше и я думал, что он начал хорошо работать, но внезапно остановился и в Орионе произошли сбои. Так что ты об этом думаешь?   -  person ahmad    schedule 30.03.2017
comment
Попробуем убрать энтропию в настройке, чтобы найти причину проблемы. Пожалуйста, повторите свой тест без использования DNS-имен, то есть IP raq в поле http.url, и посмотрите, что произойдет.   -  person fgalan    schedule 30.03.2017
comment
Простите, но что вы имеете в виду под энтропией и где я могу найти ее именно в брокере контекста, чтобы ее удалить?   -  person ahmad    schedule 31.03.2017
comment
Попробуем убрать энтропию = Попробуем упростить :)   -  person fgalan    schedule 31.03.2017
comment
Подводя итог: пожалуйста, повторите свой тест без использования DNS-имен, то есть необработанного IP-адреса в поле http.url, и посмотрите, что произойдет.   -  person fgalan    schedule 31.03.2017
comment
Я уже пробовал помещать Ip прямо в поле url, и PI принимал последовательные уведомления от контекстного брокера, и он работал хорошо, как я сказал, но иногда по какой-то причине останавливается. Теперь, если я хочу использовать службу DNS, как мне это сделать, и я хочу знать, есть ли надежная служба dyndns для использования.   -  person ahmad    schedule 02.04.2017
comment
Я не уверен, что могло происходить, но, как я уже сказал, он работал хорошо, но иногда останавливается по некоторым причинам, которые я склонен думать, что это какая-то проблема с сетью / подключением, напрямую не связанная с Orion Context Broker. В любом случае, как я предлагаю в предыдущем комментарии, не могли бы вы посмотреть журналы (обычно в /var/log/contextBroker/contextBroker.log), когда уведомление не удается, пожалуйста? Отредактируйте журнал вопросов, чтобы добавить журналы. Спасибо!   -  person fgalan    schedule 03.04.2017


Ответы (1)


Хотя я не совсем уверен, так как у меня нет всех входных данных (особенно трассировок журнала CB), по «он работал хорошо, как я сказал, но иногда останавливается по некоторым причинам» (см. Ветку комментариев в вопросный пост) Я склонен думать, что это проблема с сетью / подключением, не связанная напрямую с Orion Context Broker.

person fgalan    schedule 11.04.2017