Перехватывать вызовы методов C++ (смокинг, tpcall)
Общий вопрос о перехвате вызовов метода C++...
Существуют ли какие-либо фреймворки с открытым исходным кодом? Используя Tuxedo (11+) в качестве моего контейнера, так что в основном я хочу сделать "вокруг" на успешных вызовах tpcall. TSAM из Tuxedo делает это как расширение, но я бы предпочел пропустить слона TSAM и перехватывать вызовы tpcall самостоятельно.
Идеи?
2 ответа
Я думаю, что есть 2 возможных решения:
1) Самый простой - реализовать функцию tputrace(3c) и libutrace.so и перехватить там tpcall или tpservice. Недостатком этого подхода является то, что вам придется включить tmtrace для вашего приложения, которое я бы не использовал для бизнес-функциональности. Это хорошо для мониторинга, отладки и т. Д.
2) Реализация собственного плагина TSAM+ Tuxedo. Вы можете включить только свой собственный плагин и пропустить mondebug, monshm elephants. Или вы можете полностью пропустить TSAM + и внедрить плагин для недокументированного интерфейса engine/tsam/agent.
Я написал о подобной проблеме для моего DIY мониторинга смокинга
Если вы хотите перехватить службу MYSERVICE, вы можете написать написать общую службу с именем INTERCEPTOR и сделать следующее:
- Удалить рекламу MYSERVICE и рекламировать ее с именем INTER_MYSERVICE
- Рекламируйте ИНТЕРЦЕПТОРА с именем MYSERVICE
- INTERCEPTOR-служба должна посмотреть, с каким именем она была вызвана (MYSERVICE), и должна переадресовать вызов службе с именем INTER_name, в данном случае INTER_MYSERVICE.
Эта конфигурация может быть выполнена динамически без перезапусков.
Я использую это для целей отладки / регистрации в разработке, где это работает довольно хорошо. Я не уверен, буду ли я использовать это в производстве. Также мы используем только типы буферов XOCTET, что облегчает эту задачу, но я думаю, что оно должно работать и с различными типами буферов.
Также выполнение этой задачи для сотен сервисов одновременно может стать проблемой.