java - 在多个组件中记录全局 ID

标签 java logging jms spring-integration

我有一个系统,其中包含使用 JMS 和 Spring Integration 连接在一起的多个应用程序。消息沿着一系列应用程序发送。

[应用程序 A] -> [应用程序 B] -> [应用程序 C]

我们在消息头中设置了一个全局 ID,以便我们可以通过系统跟踪每个消息的生命周期。

我希望能够在系统中的任何日志消息前添加消息全局 ID。

还有其他人这样做过吗?有什么方法可以将此变量关联到线程,以便我可以在将来的方法中访问它吗?我不想在系统的方法中传递变量。

最佳答案

我认为 ThreadLocal 可能就是您想要的,尽管有些人可能会发现这种方法滥用了 ThreadLocal 的目的或良好的设计。像这样的东西:

public class MyIDManager {
  public static final ThreadLocal<Long> myID = new ThreadLocal<Long>();
}

...
// set ID at some point
MyIDManager.myID.set(theNewID);

...
// read it later
long currentID = MyIDManager.get();

这里的神奇之处在于 myID 的值实际上是特定于线程的,并且从不同线程访问时会有所不同。

然后您可以使用 ID 执行您喜欢的操作,包括记录它。

关于java - 在多个组件中记录全局 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1701493/

相关文章:

java - 在 JOptionPane 中显示数组

java - 使用java从sql server获取一个表的整个数据到txt文件

ruby-on-rails - 看不懂的 Rails 3.0 日志

java - 创建可靠的 JMS 客户端?

java - 使用 UTCOffset 解析日期字符串

java - 如何从视频java中提取帧?

java - Logback,设置每天最大历史文件

unit-testing - 如何使用最小起订量来验证企业库日志记录?

jms - 如何在Spring集成中设置每个出站jms消息的优先级?

java - 如何为QueueBrowser定义队列?