Проблемы и решения
25.05.2022

Методика анализа проблем интеграции "1С:Шины" с информационными базами на платформе "1С:Предприятие"

В данной статье описана методика по анализу таких проблем как: 
- Сообщения не уходят в "1С:Шину" из информационной базы.
- Сообщения не загружается в информационную базу из "1С:Шины".

Общий подход к расследованию проблем интеграции информационной базы и "1С:Шины".

В общем случае методику расследования проблемы при получении и отправке сообщений из информационной базы в шину можно описать так:

Анализ проблем при отправке и получении сообщений из информационной базы в "1С:Шину".

1. Проверка работоспособности сервера "1С:Шины".

Чтобы проверить работоспособность сервера, вы можете обратиться к нему по HTTP-интерфейсу (из браузера, например). Для этого необходимо запустить браузер и ввести в адресной строке:

Копировать в буфер обмена

https:// IP-адрес сервера "1С:Шины":порт сервера "1С:Шины"/maintenance/server/v1/heartbeat

Если сервер находится в работоспособном состоянии, вы увидите в браузере сообщение "Сервер работает":

 

2. Настроить технологический журнал сервера 1С для анализа сервисов интеграции.

Для полноценного расследования проблем, возникающих при работе с сервисами интеграции необходимо настроить тех. журнал для сбора следующих событий: EXCP, SINTEG.
Пример настройки журнала:

Копировать в буфер обмена

<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <dump location="C:\Dumps\" create="1" type="3" externaldump="1"/>
  <log location="C:\Logs\SERVER\ESB" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="SINTEG"/>
    </event>
    <property name="all"/>
  </log>
</config>

В технологический журнал записываются исключения (события EXCP), которые возникают при обработке очередей, при попытке получения или отправки сообщений в "1С:Шину".
Протоколирование работы механизмов сервисов интеграции выполняется в технологическом журнале с помощью события SINTEG.

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

Необходимо в режиме "1С:Предприятия" открыть "Функции технического специалиста", выбрать "Управление сервисами интеграции",
в открывшемся окне проверить флаг активности у сервиса интеграции, а также настройки для подключения.

 

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

Копировать в буфер обмена

19:19.215009-0,EXCP,1,process=rphost,p:processName=demo_erp,OSThread=8596,Exception=ed776789-afce-4ed9-8983-93ae0ace6e3c,Descr='src\integ\src\QpidConnectionStore.cpp(1095):
ed776789-afce-4ed9-8983-93ae0ace6e3c: http://10.72.208.23:9090/auth/oidc/token'

Например, если существуют проблемы с сетевым подключением к шине, то ошибка будет выглядеть следующим образом:

Копировать в буфер обмена

56:18.232000-0,EXCP,1,process=rphost,p:processName=demo_retail_1,OSThread=6844,Exception=d0d66e66-0683-4e52-badb-34d56034dba7,Descr='src\integ\src\QpidConnectionStore.cpp(1312):
d0d66e66-0683-4e52-badb-34d56034dba7: Ошибка при подключении к сервису интеграции : Интеграция_ОбменМагазиныТиповой : http://10.72.208.23:9090/applications/TestMag-dev
a021fe2a-72c9-4b2f-aca2-0c9963035617: Исключение при использовании QPID: Интеграция_ОбменМагазиныТиповой: proton:io: Удаленный компьютер отклонил это сетевое подключение. -connect to  10.72.208.23:6698'

4. Проверить работу фоновых заданий, которые выполняют взаимодействие информационной базы с 1С:Шиной.

Для запуска или продолжения работы фоновых заданий, отправляющих и получающих сообщения, нужно вызвать метод ВыполнитьОбработку() менеджера сервисов интеграции. Фоновые задания, выполняющие отправку и

получение сообщений, запускаются в момент первого вызова ВыполнитьОбработку и завершаются через 2 минуты с момента последнего вызова ВыполнитьОбработку.
При вызове этого метода запускается системное фоновое задание обработки очереди сообщений, которое занимается физической отправкой сообщений внешнему сервису интеграции,
по этому в журнале регистрации информационной базы необходимо проверить события, которые отображают работу фоновых заданий:

 

Если в информационной базе в режиме Предприятия в настройках управления сервисами интеграции не указано, что сервис интеграции активен, то при вызове метода ВыполнитьОбработку() в журнале регистрации появится следующее событие:

 

Изменить активность сервиса интеграции можно с помощью стандартной обработки "Управление сервисами интеграции", которая доступна через "Функции технического специалиста":

 

5. Исходящие сообщения не уходят в "1С:Шину" из информационной базы.

Проблема выглядит таким образом, что вы предполагаете, что сформировали и отправили сообщение из информационной базы, но по неизвестной вам причине в панели управления "1С:Шиной" не видите входящего сообщения, полученного "1С:Шиной".

Сначала необходимо убедится, что проблема именно в исходящей очереди на стороне базы на платформе "1С:Предприятие", т.е. сформированные сообщения не уходят в шину и остаются в очереди.
Для получения списка сообщений, находящихся в очереди, служит метод ВыбратьСообщения() менеджера канала сервиса интеграции. 

Копировать в буфер обмена

МассивСообщений = СервисыИнтеграции[СервисИнтеграции][КаналИнтеграции].ВыбратьСообщения();
Если МассивСообщений.Количество() > 0 Тогда
  Сообщить("Количество сообщений в канале интеграции:" + МассивСообщений.Количество());
КонецЕсли;

Если метод возвращает пустой массив сообщений, значит они были отправлены в "1С:Шину", т.к. сообщение удаляется из очереди сообщений при успешной отправке. В этом случае проблему следует расследовать в следующем узле цепочки обмена.
Если отправка не удалась ? сообщение остается в очереди до тех пор, пока не будет отправлено или не устареет, при этом оправка остальных сообщений в канал не выполняется, пока не будет выполнена отправка первого сообщения, которое не удалось отправить.
Добавление сообщения в очередь отправки при вызове метода "ОтправитьСообщение" отображается в тех. журнале как событие SINTEG, у которого в свойстве "Func" будет указано "insertMessageIntoSendingQueue":

Копировать в буфер обмена

00:25.198032-16010,SINTEG,2,process=rphost,p:processName=demo_retail_2,OSThread=8000,t:clientID=45726,
t:applicationName=BackgroundJob,t:computerName=uc1-9208-14 ,t:connectID=35615, SessionID=2296, Usr=DefUser, SrvcName=Интеграция_ОбменМагазиныТиповой,ChannelName=из_Магазины_в_ЦБ,
ExtSrvcURL=http://10.72.208.23:9090/applications/TestMag-dev, ExtSrvcUsr='0eQ9sZBWxlobabImHa12fTyxRUso4PQ9w0CNAMcLZCc=',
Func=insertMessageIntoSendingQueue,MessageId=52b6b20d-ec96-46b0-a638-12e06f8c1706, BodySize=20030,Context=Контест вызова

При отправке сообщения из исходящей очереди в шину в технологическом журнале появится событие SINTEG, у которого в свойстве "Func" будет указано "sendMessage":

Копировать в буфер обмена

00:25.229011-15994,SINTEG,2,process=rphost,p:processName=demo_retail_2,OSThread=8604,t:clientID=45735,
t:applicationName=BackgroundJob, t:computerName=uc1-9208-14,t:connectID=35624,SessionID=2299, Usr=DefUser,SrvcName=Интеграция_ОбменМагазиныТиповой,ChannelName=из_Магазины_в_ЦБ,
ExtSrvcURL=http://10.72.208.23:9090/applications/TestMag-dev, ExtSrvcUsr='0eQ9sZBWxlobabImHa12fTyxRUso4PQ9w0CNAMcLZCc=', Func=sendMessage,MessageId=52b6b20d-ec96-46b0-a638-12e06f8c1706,BodySize=20030

Если сообщение не удалось отправить, то в технологический журнал будет записано событие EXCP.
Например, ошибка "not found channel in esb rutime metadata" возникает при попытке отправить сформированное сообщение из информационной базы в шину, при этом у сообщения указан канал, которого нет в шине:

Копировать в буфер обмена

29:46.686005-0,EXCP,3,process=rphost,p:processName=demo_erp,OSThread=3336,t:clientID=53528, t:applicationName=BackgroundJob,t:computerName=uc1-9208-14,t:connectID=40971,SessionID=12699,
Usr=Администратор (ОрловАВ),Exception=7d02ef7a-683a-4481-9cbe-d13d8c612f3d, Descr='src\integ\src\QpidConnectionStore.cpp(1148):
7d02ef7a-683a-4481-9cbe-d13d8c612f3d: Ошибка при подключении к каналу сервиса интеграции : Интеграция_ОбменМагазиныТиповой.Тестовый : http://10.72.208.23:9090/applications/TestMag-dev : Основной::Тестовый
c329df92-3ba7-4d5d-937b-951d91ac0ac0: Недопустимое состояние объекта
not found channel in esb rutime metadata
[integ - D:\Jenkins\ci_builder\WindowsBuild2_B0MDVVR2SJIO\Platform\src\integ\src\QpidConnectionStore.cpp (175)]'

Для исправления подобной ситуации необходимо:

1)  Удалить проблемное сообщение в информационной базе.
Как удалить сообщение из канала интеграции, а также о других методах сервисов интеграции можно прочитать в разделе "Использование сервиса интеграции" в "Руководстве разработчика 1С:Предприятия 8".
2)  Привести в соответствие название каналов в информационной базе и шине.
3)  Сформировать сообщение заново.

 

6. Входящее сообщение не загружается в информационную базу из "1С:Шины".

Необходимо определить на каком участке процесса интеграции возникла проблема:

1)   Сообщение "зависло" в узле "Канал1СНазначение".
В окне приложения "1С:Шины" на вкладке "Каналы", счетчик сообщений показывает, что в канале есть сообщения, при этом значения счетчика не уменьшаются при работе приемника. Например:

 

2)  Сообщения в канале "1С:Шины" нет, счетчик в приложении показывает, что все сообщения доставлены, но при этом данных, которые были в сообщении, не загружены в информационную базу.
В этом случае нужно убедиться, что ошибка происходит именно при обработке загруженного сообщения, и оно остается в локальной очереди информационной базы.

Получение сообщения сервиса интеграции из "1С:Шины" и запись его в очередь обработки сообщений информационной базы отображается в технологическом журнале событием SINTEG,
у которого в свойстве "Func" будет указано "receiveMessage":

Копировать в буфер обмена

15:43.420017-172004,SINTEG,2,process=rphost,p:processName=demo_erp, OSThread=4360,SrvcName=Интеграция_ОбменМагазиныТиповой,ChannelName=в_ЦБ_из_Магазины,
ExtSrvcURL=http://10.72.208.23:9090/applications/TestMag-dev,ExtSrvcUsr='hIrwFcJKcyLmHs0yDsF_JCSp6TLmGGd1h49hFG5ZJ6Q=',Func=receiveMessage,MessageId=884ace62-9676-480e-9b15-8badec0475fd,BodySize=20030

Обработка полученного сообщения сервиса интеграции, в рамках выполнении фонового задания, отображается в технологическом журнале событием SINTEG,
у которого в свойстве "Func" будет указано "processReceivedMessage":

Копировать в буфер обмена

59:28.309003-5343994,SINTEG,2,process=rphost,p:processName=demo_erp, OSThread=11416,t:clientID=48143,t:applicationName=BackgroundJob,t:computerName=uc1-9208-14,t:connectID=37708,SessionID=11676,
Usr=DefUser, SrvcName=Интеграция_ОбменМагазиныТиповой,ChannelName=в_ЦБ_из_Магазины, ExtSrvcURL=http://10.72.208.23:9090/applications/TestMag-dev,ExtSrvcUsr='hIrwFcJKcyLmHs0yDsF_JCSp6TLmGGd1h49hFG5ZJ6Q=',
Func=processReceivedMessage,MessageId=acbbb5fb-d489-486a-9ef8-2c360e47cefa,BodySize=20030

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

Следует обратить внимание, что обычно такие ошибки приводят к тому, что входящая очередь на стороне информационной базы будет увеличиваться, при этом в мониторе "1С:Шины" счетчик сообщений, будет показывать, что все сообщения доставлены.
Происходит это по той причине, что для "1С:Шины" сообщение считается доставленным, если оно передано во входящую очередь информационной базы.
Реализовать подсистему мониторинга и контроля входящей и исходящей очереди разработчик может самостоятельно исходя из методов, которые предоставляют сервисы интеграции,
более подробно о них указано в разделе "Использование сервиса интеграции" в "Руководстве разработчика 1С:Предприятия 8".