在 Spring Boot 项目中集成 Apollo、Cat 的 java.net.UnknownHostException: org.cat 错误问题


今天做 Spring Boot 项目中集成 Apollo 和 Cat 时遇到一个一些异常,异常内容大致如下:

java.lang.IllegalStateException: java.lang.reflect. InvocationTargetException
    at com.ctrip.framework.apollo.tracer.internals.cat.CatMessageProducer.newTransaction(CatMessageProducer.java:81) ~[apollo-core-1.1.0.jar:1.1.0]
...
Caused by: java.lang.ExceptionInInitializerError: null
    at com.dianping.cat.message.internal.DefaultMessageManager.<init>(DefaultMessageManager.java:45) ~[cat-client-3.0.0.jar:na]
...
Caused by: java.lang.RuntimeException: Error when get cat router service, please contact cat support team for help!
    at com.dianping.cat.configuration.ApplicationEnvironment.loadClientConfig(ApplicationEnvironment.java:151) ~[cat-client-3.0.0.jar:na]
...
Caused by: java.net.UnknownHostException: org.cat
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_191]
...
java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
    at com.ctrip.framework.apollo.tracer.internals.cat.CatMessageProducer.logEvent(CatMessageProducer.java:62) ~[apollo-core-1.1.0.jar:1.1.0]
...

这个异常的根本原因是没有正确连接到 Cat 服务器。客户端如果没有找到 Cat 配置文件,则会去连接“org.cat”这个地址。Cat 客户端的配置很特殊,并不能通过 Spring Boot 的 properties文件或者环境变量来配置,它是通过特定目录下的 client.xml 文件来配置的。

在 Linux 下,这个目录是:

/data/appdatas/cat

在 Windows 下,这个目录和启动进程在同一个磁盘分区下的 /data/appdatas/cat。如果集成 Cat 客户端的 Spring Boot 程序在 D 盘运行,那么这个目录的地址就是:

D:\data\appdatas\cat

如果 client 文件在 D 盘(D:\data\appdatas\cat\client.xml),而 Spring Boot 程序在 E 盘,当运行 Spring Boot 程序时就找不到 client.xml 文件,会报“java.net.UnknownHostException: org.cat”相关的异常。

将 client.xml 文件和 Spring Boot 项目放在同一个磁盘分区就能解决这个问题。


前一篇:
后一篇:

发表评论