Большинство 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 мс и отбрасывает оставшиеся девять сообщений. Для устранения этого несоответствия создайте решение, которое выполняет следующие шаги:
- P1 отправляет сообщения в O2.
- O2 считывает одно сообщение и отбрасывает девять.
- O2 отправляет P2 одно прочитанное сообщение.
- P2 отправляет O1 одно прочитанное сообщение.
- 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 и система связи между клиентом и сервером работают как положено, но клиент отправил запрос, который вызывает ошибку на сервере.
Исправить:
Отправьте корректный запрос клиенту или настройте сервер для успешного ответа на такие запросы.