那些年,阿里云ACE上碰到的坑

作者: JerryHouse 分类: java 发布时间: 2015-03-07 09:31 ė 6没有评论

使用阿里云的产品有段时间了,产品使用简单,稳定性高,售后服务好,尤其是他们的工单服务最为让人称赞。客户提交了工单后客服人员几乎马上就会给出相应的解决方案,如果他们不能解决就会转到相应的技术工程师哪里,实时更新问题的处理进展,节约了我很多时间,让我可以专心在自己的业务上。当然,我在使用他们的产品的过程中也碰到了一些坑,主要是针对ACE产品,让我长了不少知识。
1. Jar包冲突
在本地打包成功并在ACE容器中测试成功,上传到线上ACE容器时不能成功启动并抛出异常:Cjava.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.
这是因为项目同时包含了对log4j-over-slf4j.jar和slf4j-log4j12.jar两个jar包的依赖,而这两个jar包会循环引用导致内存溢出。解决的办法就是将两个jar包其中一个的依赖移除掉。
这里的坑在于本地和线上的ACE环境不一致,本地可以正常启动而线上不能正常启动。

2. 访问外部IP
出于安全考虑,线上ACE环境不能直接访问外部的IP,若果需要访问外部IP需要使用ACE提供的扩展服务中的HTTP代理服务。坑的地方在于ACE的Java帮助文档中的代理设置方法已经过时,使用httpclient 4时的正确的http代理设置方法如下:

        String host = "proxy.ace.aliyun.com";
        int port = 3128;
        String username = "xx";
        String password = "xx";
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope(host,port ), new UsernamePasswordCredentials(username, password));
        HttpHost proxy = new HttpHost(host, port, "http");
        httpClient = HttpClientBuilder.create().setProxy(proxy).setDefaultCredentialsProvider(credsProvider).build();

要主要的是”proxy.ace.aliyun.com”是阿里云的内部网址,只能在ACE的线上环境测试,本地是不能测试的。

本文出自 dcharm,转载时请注明出处及相应链接。

本文永久链接: http://www.dcharm.com/?p=279

发表评论

Ɣ回顶部