我正在研究 springboot 和 AWS X-Ray 集成,作为此工作的一部分,我们推送了代码并部署了 springboot 应用程序和 x-ray 守护进程作为生产环境中 ESC Fargate 任务中的边车容器,一切正常,但我们不需要对 QA 和 STAGE 等较低环境的任何 X 射线支持,因此我们不会部署 X 射线守护进程;因为现有代码无法连接到 X 射线守护程序并抛出以下异常。
04:54:12.364 [pool-2-thread-1] ERROR com.amazonaws.xray.strategy.sampling.pollers.RulePoller -Encountered error polling GetSamplingRules:
com.amazonaws.xray.internal.XrayClientException: Could not serialize and send request.
at com.amazonaws.xray.internal.UnsignedXrayClient.sendRequest(UnsignedXrayClient.java:142) ~[core-commons-qa2-1.0.0.jar!/:?]
at com.amazonaws.xray.internal.UnsignedXrayClient.getSamplingRules(UnsignedXrayClient.java:112) ~[core-commons-qa2-1.0.0.jar!/:?]
at com.amazonaws.xray.strategy.sampling.pollers.RulePoller.pollRule(RulePoller.java:100) ~[core-commons-qa2-1.0.0.jar!/:?]
at com.amazonaws.xray.strategy.sampling.pollers.RulePoller.lambda$start$0(RulePoller.java:72) ~[core-commons-qa2-1.0.0.jar!/:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:?]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[?:?]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[?:?]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[?:?]
at java.net.Socket.connect(Socket.java:609) ~[?:?]
我们如何处理这种可以在较低环境下成功运行相同代码库而不删除 X-Ray SDK 代码的情况?是否存在仅在 X 射线守护进程运行时进行检查和检测的配置?请在这里透露一些信息。
您可以使用 spring profiling 来针对不同环境启用/禁用 xray: