Я реализовал пару серверов публикации-подписки, используя службу уведомлений TAO в Linux. Есть два сервера E1 и E2. E2 подписался на тип новостей, скажем, 1, а E1 подписался на новый тип, скажем, 2. E1 публикует новости типа 1, после чего E2 выполняет некоторые вычисления и публикует результат новостей типа 2, который получает E1. Этот цикл продолжается. События имеют тип CosNotification::StructuredEvent. Проблема в том, что система выдает много сообщений об ошибках после выполнения несколько раз на обоих терминалах сервера.
TAO (2723|139817071765312) — ServerRequest::tao_send_reply_exception, не удалось отправить ответ об исключении
Я новичок в TAO (а также в CORBA), поэтому я не уверен, связана ли эта проблема с потоками или нет. Если я использую следующий svc.conf на E1, E2 или на обеих сторонах, передача событий становится очень медленной:
static Server_Strategy_Factory "-ORBConcurrency thread-per-connection" static Client_Strategy_Factory "-ORBWaitStrategy rw -ORBTransportMuxStrategyэксклюзивный -ORBConnectStrategy заблокирован -ORBConnectionHandlerCleanup 1" static Resource_Factory "-ORBFlushingStrategy blocking"
Я скопировал приведенные выше параметры с веб-сайта TAO, чтобы иметь один поток для каждого соединения, думая, что ошибка может быть вызвана достижением предела количества потоков. Также я попытался использовать -ORBConcurrency thread-per-connect в качестве параметра командной строки на обеих сторонах E1 и E2. Это приводит к тому, что некоторые CORBA-исключения не запускают серверы. Ниже приведены команды, которые я использую для запуска своей системы, которая выдает ServerRequest::tao_send_reply_exception, через некоторое время не может отправлять ответные сообщения об исключении:
tao_cosnaming -ORBEndPoint iiop:localhost:12345 -ORBDaemon // для запуска службы имен tao_cosnotification -ORBDebugLevel 10 -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService -ORBDaemon // для запуска службы уведомлений ./E1 corbaloc:iiop:localhost: 12345/NameService // запускает E1 ./E2 corbaloc:iiop:localhost:12345/NameService //запускает E2
Может ли кто-нибудь предложить о том, что происходит здесь и как справиться с этой проблемой?