故障似乎在远程请求花费了很长时间(超过20秒)时发生最多。在我的开发服务器上,错误发生的频率较低,只有在请求时间非常长(超过45秒)时才会出现。然而,错误有时也会在瞬间发生(发送请求后立即失败)。大多数错误也具有HTTP状态:502(错误网关),但有些只说HTTP失败。
除将war文件放在webapps目录中外,我没有对BlazeDS进行任何特殊处理。该应用程序通过https访问。远程调用仅通过“destination”引用服务器。我们DEV和TEST实例上的tomcat服务器具有相同的java参数(相同的Xms和Xmx等)。以下是我相关的文件:
services-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<default-channels>
<channel ref="my-secure-amf"/>
</default-channels>
</services>
<channels>
<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>
</channels>
<services-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
...
<servlet>
<servlet-name>spring-flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/flexContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
</web-app>
flexContext.xml
<!--
I have component-scan tags here to scan my class files. The Controller I'm using for flex has an annotation on it to define it as a remote destination. Here it is:
@Controller
@RemotingDestination(value = "dest", channels="my-secure-amf")
public class FlexController {
-->
<bean id="flexExceptionTranslator" class="edu.liberty.zconduct.web.FlexExceptionTranslator" />
<flex:message-broker>
<flex:exception-translator ref="flexExceptionTranslator"/>
<!-- <flex:secured /> Had this previously, but it wasn't working then, either -->
</flex:message-broker>
我已经走投无路了。这个错误会导致应用崩溃。如果你能帮忙,请一定要帮帮我。
编辑 我切换到 http,但仍然收到错误。现在 Tomcat 显示:
警告:发送结束数据包时出错
java.net.SocketException: Broken pipe
我查看了 jk_mod 的 apache 日志,发现一些调试信息,看起来像我发送的请求,然后是以下内容:
[debug] ajp_send_request::jk_ajp_common.c (1592): 重新发送请求体 (432)
[debug] jk_shutdown_socket::jk_connect.c (681): 准备关闭套接字 68
[debug] jk_shutdown_socket::jk_connect.c (732): 关闭套接字 68 并读取 0 残留字节
[info] ajp_connection_tcp_get_message::jk_ajp_common.c (1150): (myTestServer) 无法从 Tomcat 接收响应头消息,可能存在网络问题或 tomcat (xx.xx.xx.xx:xxxx) 已关闭 (errno=11)
[error] ajp_get_reply::jk_ajp_common.c (1962): (myTestServer) Tomcat 已关闭或拒绝连接。 未向客户端发送任何响应(尚未)
[info] ajp_service::jk_ajp_common.c (2447): (myTestServer) 发送请求至 Tomcat 失败 (可恢复),(attempt=2)
[error] ajp_service::jk_ajp_common.c (2466): (myTestServer) 连接到 Tomcat 失败。
[debug] ajp_reset_endpoint::jk_ajp_common.c (743): (myTestServer) 使用 sd = 4294967295 (套接字关闭) 重置端点
[debug] ajp_done::jk_ajp_common.c (2905): 为工作进程 myTestServer 回收连接池插槽=0
[info] jk_handler::mod_jk.c (2615): 对于 worker=myTestServer,服务错误=0