0

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

有没有开源框架?使用 Tuxedo (11+) 作为我的容器,所以基本上我想对成功的 tpcall 调用进行“环绕”。Tuxedo 的 TSAM 将其作为扩展,但我宁愿跳过 TSAM 大象并自己捕获 t​​pcall 调用。

想法?

4

2 回答 2

1

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

  1. 取消 MYSERVICE 的广告并使用名称 INTER_MYSERVICE 进行广告
  2. 使用名称 MYSERVICE 为 INTERCEPTOR 做广告
  3. INTERCEPTOR-service 必须查看它被调用的名称 (MYSERVICE),并且必须将调用转发到名称为 INTER_name 的服务,在本例中为 INTER_MYSERVICE。

此配置可以动态完成而无需重新启动。

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

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

于 2014-01-19T13:35:45.120 回答
0

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

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

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

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

于 2016-01-21T10:52:54.650 回答