Проблемы и решения
25.05.2022
В данной статье описана методика по анализу таких проблем как:
- Сообщения не уходят в "1С:Шину" из информационной базы.
- Сообщения не загружается в информационную базу из "1С:Шины".
В общем случае методику расследования проблемы при получении и отправке сообщений из информационной базы в шину можно описать так:
Чтобы проверить работоспособность сервера, вы можете обратиться к нему по HTTP-интерфейсу (из браузера, например). Для этого необходимо запустить браузер и ввести в адресной строке:
Копировать в буфер обменаhttps:// IP-адрес сервера "1С:Шины":порт сервера "1С:Шины"/maintenance/server/v1/heartbeat
Если сервер находится в работоспособном состоянии, вы увидите в браузере сообщение "Сервер работает":
Для полноценного расследования проблем, возникающих при работе с сервисами интеграции необходимо настроить тех. журнал для сбора следующих событий: 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.
Необходимо в режиме "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'
Для запуска или продолжения работы фоновых заданий, отправляющих и получающих сообщения, нужно вызвать метод ВыполнитьОбработку() менеджера сервисов интеграции. Фоновые задания, выполняющие отправку и
получение сообщений, запускаются в момент первого вызова ВыполнитьОбработку и завершаются через 2 минуты с момента последнего вызова ВыполнитьОбработку.
При вызове этого метода запускается системное фоновое задание обработки очереди сообщений, которое занимается физической отправкой сообщений внешнему сервису интеграции,
по этому в журнале регистрации информационной базы необходимо проверить события, которые отображают работу фоновых заданий:
Если в информационной базе в режиме Предприятия в настройках управления сервисами интеграции не указано, что сервис интеграции активен, то при вызове метода ВыполнитьОбработку() в журнале регистрации появится следующее событие:
Изменить активность сервиса интеграции можно с помощью стандартной обработки "Управление сервисами интеграции", которая доступна через "Функции технического специалиста":
Проблема выглядит таким образом, что вы предполагаете, что сформировали и отправили сообщение из информационной базы, но по неизвестной вам причине в панели управления "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) Сформировать сообщение заново.
Необходимо определить на каком участке процесса интеграции возникла проблема:
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, в описании которого можно увидеть ошибку, которая возникла при обработке, а также место ее возникновения.
Рассмотрим примеры таких ошибок:
40:05.162020-0,EXCP,3,process=rphost,p:processName=demo_erp,OSThread=8852,t:clientID=50904, t:applicationName=BackgroundJob,t:computerName=uc1-9208-14,t:connectID=39382, SessionID=12198,Usr=DefUser,
Exception=3ac2750b-d316-4688-a55b-e735dc6590b6,Descr='src\integ\src\IntegrationServiceIntegPlugin.cpp(750):
3ac2750b-d316-4688-a55b-e735dc6590b6: Исключение при обработке полученного сообщения: СервисИнтеграции.Интеграция_ОбменМагазиныТиповой.КаналСервисаИнтеграции.в_ЦБ_из_Магазины:
aad6bb50-c4a9-42ae-baad-8227d3d72574 8d366056-4d5a-4d88-a207-0ae535b7d28e: Ошибка при загрузке сообщения из "1С:Шины".
{ИнтеграционнаяШина СервисИнтеграции.Интеграция_ОбменМагазиныТиповой.Модуль(5)}: ВызватьИсключение "Ошибка при загрузке сообщения из "1С:Шины".";
10:14.232028-0,EXCP,3,process=rphost,p:processName=demo_retail_1,OSThread=2272,t:clientID=1048, t:applicationName=BackgroundJob,t:computerName=uc1-9208-14,t:connectID=1005, SessionID=30,
Usr=DefUser, Exception=3ac2750b-d316-4688-a55b-e735dc6590b6,Descr='src\integ\src\IntegrationServiceIntegPlugin.cpp(750):
3ac2750b-d316-4688-a55b-e735dc6590b6: Исключение при обработке полученного сообщения: СервисИнтеграции.Интеграция_ОбменМагазиныТиповой.КаналСервисаИнтеграции.в_Магазины_из_ЦБ:
aeebf421-e4fb-48b8-b40c-1a47353cc380c329df92-3ba7-4d5d-937b-951d91ac0ac0: Недопустимое состояние объекта process received message method not found
[integ- D:\Jenkins\ci_builder\WindowsBuild2_B0MDVVR2SJIO\Platform\src\integ\src\IntegrationServiceIntegPlugin.cpp (796)]'
Для исправления подобной ошибки необходимо указать корректный обработчик получения сообщений и запустить обработку сообщений "1С:Шины".
Следует обратить внимание, что обычно такие ошибки приводят к тому, что входящая очередь на стороне информационной базы будет увеличиваться, при этом в мониторе "1С:Шины" счетчик сообщений, будет показывать, что все сообщения доставлены.
Происходит это по той причине, что для "1С:Шины" сообщение считается доставленным, если оно передано во входящую очередь информационной базы.
Реализовать подсистему мониторинга и контроля входящей и исходящей очереди разработчик может самостоятельно исходя из методов, которые предоставляют сервисы интеграции,
более подробно о них указано в разделе "Использование сервиса интеграции" в "Руководстве разработчика 1С:Предприятия 8".