拦截C++方法调用(Tuxedo、tpcall)

Intercept C++ method calls (Tuxedo, tpcall)

本文关键字:tpcall Tuxedo C++ 方法 调用 拦截      更新时间:2023-10-16

关于拦截C++方法调用的一般问题。。。

有开源框架吗?使用Tuxedo(11+)作为我的容器,所以基本上我想对成功的tpcall调用做一次"绕过"。Tuxedo的TSAM将此作为扩展,但我宁愿跳过TSAM大象并陷阱tpcall调用。

想法?

如果您想拦截服务MYSERVICE,您可以编写一个名为INTERCEPTOR的通用服务,并执行以下操作:

  1. 对MYSERVICE进行广告宣传,并将其命名为INTER_MYSERVICE
  2. 以MYSERVICE的名称为拦截器做广告
  3. INTERCEPTOR服务必须查找调用它的名称(MYSERVICE),并且必须将调用转发到名为INTER_name的服务,在本例中为INTER_MYSERVICE

此配置可以在不重新启动的情况下动态完成。

我在开发中使用它进行调试/日志记录,在那里它运行得很好。我不确定我是否会在生产中使用它。此外,我们只使用XOCTET缓冲区类型,这使它更容易,但我认为它也应该适用于不同的缓冲区类型。

同时为数百个服务执行此操作可能会成为一个问题。

我认为有两种可能的解决方案:

1) 最简单的是实现tputrace(3c)函数和libutrace.so,并在那里捕获tpcall或tpservice。这种方法的缺点是,您将不得不为您的应用程序打开tmtrace,而我不会依赖它来实现业务功能。它适用于监控、调试等。

2) 实现自定义TSAM+Tuxedo插件。你可以只启用你自己的插件,跳过mondebug,monshm大象。或者,您可以完全跳过TSAM+,并为未记录的引擎/TSAM/agent接口实现插件。

我为我的DIY Tuxedo监控写了类似的问题