我们在 Azure VM 上运行了 WSO2CEP,这是一个复杂的事件引擎,它将使用简单的 HTTP POST 通过其发布者发出通知。但是,它可以在 AWS EC2 上运行良好,但在 Azure VM 上则不行。它有时会抛出以下异常。
ID: [-1] [] [2016-10-07 16:05:00,043] ERROR {org.wso2.carbon.event.output.adapter.core.OutputEventAdapter} - Event dropped at Output Adapter '57f629ee23a74a1688b9e7c1_PUBLISHER' for tenant id '-1234', Read timed out
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
at org.wso2.carbon.event.output.adapter.http.HTTPEventAdapter$HTTPSender.run(HTTPEventAdapter.java:317)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我认为这可能是由讨论的问题引起的这里和这里。解决方法是将实例级公共 IP(ILPIP)分配给 VM。但是,我们现在使用的是 Azure 资源管理器模型,并且所有相关的 ILPIP 文章似乎都在谈论经典模式(Azure 服务管理器)。
目前我们有一个动态公共 IP 地址分配给网络接口的虚拟机。
ARM 还有 ILPIP 吗?我们如何设置它?
答案1
简而言之,据我所知,没有办法将 ILPIP 分配给 ARM VM。
因为ARM中没有ILPIP的概念。ARM改变了网络架构。
当您在 ARM 中为 VM 分配公共 IP(实际上,它被分配给连接到 VM 的 vNIC)时,此 IP 将不会被其他 VM 共享,这与 ASM 不同。在 ASM 中,公共 IP 地址归云服务所有。属于同一云服务的所有 VM 将共享公共 IP 地址。这就是我们需要 ILPIP 的原因。但在 ARM 中,VM 有自己的公共 IP 地址。
因此,我怀疑您的问题是否与上述链接相同。请尝试在虚拟机上执行网络捕获以检查确切的网络行为,这对于网络故障排除非常有用。