Устранение неполадок API промежуточного программного обеспечения,Устранение неполадок API промежуточного программного обеспечения

Большинство API промежуточного ПО возвращают объект SdvResult . В случае успеха этот объект содержит ожидаемый результат. В случае неудачи этот объект содержит объект SdvStatus , указывающий на неожиданное поведение или ошибку, часто обозначаемую кодом ошибки, таким как Internal , Unavailable или DataLoss .

Эта страница поможет вам устранить эти ошибки.

Устранение неполадок при регистрации и создании.

Сбои при регистрации и создании обычно возникают при попытке создать или зарегистрировать недействительную услугу.

Не удается создать вторую службу

Ошибка:

Internal ошибка.

Причина:

Вы пытаетесь зарегистрировать один и тот же экземпляр пакета служб (имя и идентификатор экземпляра) дважды.

Исправить:

Не пытайтесь зарегистрировать один и тот же экземпляр пакета служб (имя и идентификатор экземпляра) дважды.

Не удается удалить дублирующийся пакет услуг.

Ошибка:

Status(-3, EX_ILLEGAL_ARGUMENT)

Причина:

Вы пытаетесь удалить дубликат пакета служб, которого не существует.

Исправить:

Не пытайтесь удалить дубликат пакета служб, которого не существует.

Не удается получить экземпляр издателя для отправки сообщений.

Ошибка:

Вызов функции take_publisher() возвращает none .

Причина:

Вы дважды вызвали функцию take_publisher() для одного и того же варианта из одного и того же экземпляра пакета сервисов.

Исправить:

Не вызывайте take_publisher() дважды для одного и того же варианта из одного и того же экземпляра пакета сервисов.

Невозможно создать подписчика, наблюдателя, объект из истории или объект мгновенного чтения.

Ошибка:

Ошибка Unavailable .

Причина:

Вы пытались создать Subscriber , Observer , History или InstantReader для издателя, которого не существует или регистрация которого была прекращена.

Исправить:

Перед тем как пытаться создать для издателя Subscriber , Observer , History или InstantReader , убедитесь, что издатель существует или зарегистрирован.

Не удаётся создать RPC-клиент

Ошибка:

Unavailable недоступности

Причина:

Вы попытались создать RPC-клиент для серверного модуля с именем, которого не существует или который не зарегистрирован.

Исправить:

Перед созданием RPC-клиента убедитесь, что сервер существует и зарегистрирован.

Устранение неполадок связи

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

Устранение неполадок, связанных с отменой регистрации издателя.

Ошибки могут возникать, когда издатель снимает свою регистрацию, в то время как его читатели остаются активными.

Функция read_next_messages() подписчика возвращает пустые списки.

Ошибка:

read_next_messages() выполняется успешно, но возвращает пустые списки.

Причина:

Издательство снимается с регистрации, пока у него есть активные читатели.

Исправить:

Используйте подписчиков или историю сообщений с потоком доступности. Если последнее сообщение в потоке доступности недоступно, то издатель отменяет регистрацию, и новые сообщения не поступают.

Функция next() наблюдателя возвращает внутреннюю ошибку.

Ошибка:

next() возвращает Internal ошибку.

Причина:

Издательство снимается с регистрации, пока у него есть активные читатели.

Исправить:

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

Функция read_from_history() объекта History не возвращает новые сообщения.

Ошибка:

read_from_history() не возвращает новых сообщений; она возвращает только старые сообщения.

Причина:

Издательство снимается с регистрации, пока у него есть активные читатели.

Исправить:

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

Функция InstantReader read_latest_message() возвращает внутреннюю ошибку.

Ошибка:

read_latest_message() возвращает Internal ошибку.

Причина:

Издательство снимается с регистрации, пока у него есть активные читатели.

Исправить:

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

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

Ошибки могут возникать при попытке чтения из пустой очереди сообщений.

Функция read_next_messages() подписчика возвращает пустой список.

Ошибка:

read_next_messages() успешно возвращает пустой список.

Причина:

Издатель активен, но не отправлял сообщений.

Исправить:

Используйте подписчиков или историю сообщений с потоком доступности. Если последнее сообщение из потока доступности доступно, значит, издатель активен и новых сообщений нет.

Функция next() наблюдателя возвращает внутреннюю ошибку.

Ошибка:

next() возвращает Internal ошибку.

Причина:

Издатель активен, но не отправлял сообщений.

Исправить:

Используйте подписчиков или историю сообщений с потоком доступности. Если последнее сообщение из потока доступности доступно, значит, издатель активен и новых сообщений нет.

Функция read_from_history() объекта History не возвращает новые сообщения.

Ошибка:

read_from_history() успешно возвращает пустой список.

Причина:

Издатель активен, но не отправлял сообщений.

Исправить:

Используйте подписчиков или историю сообщений с потоком доступности. Если последнее сообщение из потока доступности доступно, значит, издатель активен и новых сообщений нет.

Функция InstantReader read_latest_message() возвращает внутреннюю ошибку.

Ошибка:

read_latest_message() возвращает Internal ошибку.

Причина:

Издатель активен, но не отправлял сообщений.

Исправить:

Используйте подписчиков или историю сообщений с потоком доступности. Если последнее сообщение из потока доступности доступно, значит, издатель активен и новых сообщений нет.

Устранение неполадок, связанных с переполнением буфера или потерей данных.

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

При первом чтении подписчиком после переполнения возвращается ошибка DataLoss.

Ошибка:

read_next_message() возвращает ошибку DataLoss .

Причина:

Издатель рассылает сообщения быстрее, чем читатель может их усвоить.

Исправить:

Первый вызов next() наблюдателя после переполнения возвращает ошибку DataLoss.

Ошибка:

Функция next() возвращает ошибку DataLoss .

Причина:

Издатель рассылает сообщения быстрее, чем читатель может их усвоить.

Решение: Возможные варианты решения:

  • Издатель публикует сообщения с меньшей скоростью. Например, у вас может быть переменная с меткой времени последнего сообщения. Если текущее время меньше времени последней публикации плюс разница, сообщение не публикуется. При использовании этого механизма публикуется не более одного сообщения на каждую разницу.

  • В объекте Consumer вместо наблюдателя используется объект InstantRead . Объект InstantRead не возвращает ошибки переполнения и всегда возвращает последнее сообщение. Если для вас важно только последнее сообщение, то вместо наблюдателя можно использовать объект InstantRead .

  • Потребитель реализует выборку. Если в вашем решении есть издатель (P1), который публикует сообщения быстрее, чем наблюдатель (01) может их прочитать, вы можете создать нового издателя (P2) и наблюдателя (02), чтобы учесть разницу в скорости публикации и чтения.

    Например, предположим, что P1 публикует сообщение каждые 10 мс, а O1 может прочитать только одно сообщение каждые 100 мс и отбрасывает оставшиеся девять сообщений. Для устранения этого несоответствия создайте решение, которое выполняет следующие шаги:

    1. P1 отправляет сообщения в O2.
    2. O2 считывает одно сообщение и отбрасывает девять.
    3. O2 отправляет P2 одно прочитанное сообщение.
    4. P2 отправляет O1 одно прочитанное сообщение.
    5. O1 считывает одно сообщение каждые десять секунд.

    В следующем примере кода показано, как реализовать этот сценарий выборки:

    int discarded_message = 10;
    
    while (true) {
    message m = O2.read_message();
    if discarded_message == 10 {
      discarded_message = 0;
      P2.publish(m);
    } else {
     discarded_message ++;
    }
    }
    

Исторические труды неполны.

Ошибка:

Сообщение теряется до момента копирования истории. При чтении прямого уведомления об ошибке не появляется.

Причина:

Издатель рассылает сообщения быстрее, чем читатель может их усвоить.

Исправить:

InstantReader читает только последнее сообщение.

Ошибка:

Сообщение теряется до момента копирования истории. При чтении прямого уведомления об ошибке не появляется.

Причина:

Издатель рассылает сообщения быстрее, чем читатель может их усвоить.

Исправить:

Н/Д

RPC-клиент вызывает метод, но этот метод недоступен.

Ошибка:

Вызов метода завершается ошибкой Unavailable .

Причина:

SDV не знает имени сервера и возвращает ошибку Unavailable . Эта ошибка возвращается промежуточным ПО, если обнаружение сервисов не возвращает допустимое имя сервера.

Исправить:

Запустите пакет служб, который определяет server для заданного интерфейса, который хочет использовать клиент.

Реализация на стороне сервера возвращает ошибку SdvStatus.

Ошибка:

Реализация на стороне сервера возвращает объект SdvResult , содержащий ошибку SdvStatus , например, SdvStatusCode::NotFound . Ошибка передается обратно вызывающему клиенту.

Причина:

Система SDV и система связи между клиентом и сервером работают как положено, но клиент отправил запрос, который вызывает ошибку на сервере.

Исправить:

Отправьте корректный запрос клиенту или настройте сервер для успешного ответа на такие запросы.