Перехватывать вызовы методов C ++ (смокинг, tpcall)

Общий вопрос о перехвате вызовов метода C ++ …

Существуют ли фреймворки с открытым исходным кодом? Используя Tuxedo (11+) в качестве моего контейнера, так что в основном я хочу сделать «вокруг» на успешных вызовах tpcall. TSAM из Tuxedo делает это как расширение, но я бы предпочел пропустить слона TSAM и перехватывать вызовы tpcall самостоятельно.

Идеи?

0

Решение

Я думаю, что есть 2 возможных решения:

1) Самый простой — реализовать функцию tputrace (3c) и libutrace.so и перехватить там tpcall или tpservice. Недостатком этого подхода является то, что вам придется включить tmtrace для вашего приложения, которое я бы не использовал для бизнес-функциональности. Это хорошо для мониторинга, отладки и т. Д.

2) Реализовать собственный плагин TSAM + Tuxedo. Вы можете включить только свой собственный плагин и пропустить mondebug, monshm elephants. Или вы можете полностью пропустить TSAM + и внедрить плагин для недокументированного интерфейса engine / tsam / agent.

Я написал о подобной проблеме для моего DIY мониторинга смокинга

0

Другие решения

Если вы хотите перехватить службу MYSERVICE, вы можете написать написать общую службу с именем INTERCEPTOR и сделать следующее:

  1. Удалить рекламу MYSERVICE и рекламировать ее с именем INTER_MYSERVICE
  2. Рекламируйте ИНТЕРЦЕПТОРА с именем MYSERVICE
  3. Служба INTERCEPTOR должна посмотреть, с каким именем она была вызвана (MYSERVICE), и должна переадресовать вызов службе с именем INTER_name, в данном случае INTER_MYSERVICE.

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

Я использую это для целей отладки / регистрации в разработке, где это работает довольно хорошо. Я не уверен, буду ли я использовать это в производстве. Также мы используем только типы буферов XOCTET, что облегчает эту задачу, но я думаю, что оно должно работать и с различными типами буферов.

Также выполнение этой задачи для сотен сервисов одновременно может стать проблемой.

1

По вопросам рекламы [email protected]