我有一个很大的问题。我使用 Flex3/Tomcat/BlazeDS/Spring 编写了一个大型应用程序,该应用程序在本地开发时运行良好,在部署到公共开发环境时运行良好,但在部署到我们的测试环境时经常失败。
当远程处理请求花费大量时间(超过 20 秒)时,失败似乎最容易发生。在我的开发服务器上,错误发生,但仅当请求花费很长时间(超过 45 秒)时才会发生。然而,错误有时也会看似立即发生(发送请求,但立即失败)。大多数错误还带有 HTTP 状态:502(网关错误),但有些错误只是显示 HTTP 失败。
除了将 war 文件放在 webapps 目录中之外,我没有对 BlazeDS 进行任何特殊操作。该应用程序通过 https 访问。远程调用仅通过“目的地”引用服务器。我们的 DEV 和 TEST 实例上的 tomcat 服务器具有相同的 java 参数(相同的 Xms 和 Xmx 等)。以下是我的相关文件:
服务配置.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>
我已接近山穷水尽了。该错误是一个应用程序破坏者。如果可以的话请帮助我。
EDIT我切换到http,仍然出现错误。 Tomcat 现在说:
警告:发送结束数据包时出错
java.net.SocketException:管道损坏
我在 apache 日志中查找 jk_mod 并看到一些类似于我发送的请求的调试信息,然后是以下内容:
[调试]
ajp_send_request::jk_ajp_common.c
(1592):重新发送请求正文(432)
[调试]
jk_shutdown_socket::jk_connect.c
(681):即将关闭套接字 68
[调试]
jk_shutdown_socket::jk_connect.c
(732): 关闭套接字 68 并读取 0
挥之不去的字节
[信息]
ajp_connection_tcp_get_message::jk_ajp_common.c
(1150): (myTestServer) 无法接收
响应头消息来自
tomcat,网络问题还是tomcat
(xx.xx.xx.xx:xxxx) 已关闭 (errno=11)
[错误] ajp_get_reply::jk_ajp_common.c
(1962): (myTestServer) Tomcat 已关闭
或拒绝连接。没有任何回应
已发送给客户(尚未)
[信息] ajp_service::jk_ajp_common.c
(2447):(myTestServer)发送请求
tomcat失败(可恢复),
(尝试=2)
[错误] ajp_service::jk_ajp_common.c
(2466):(myTestServer)连接到
雄猫失败。
[调试]
ajp_reset_endpoint::jk_ajp_common.c
(743): (myTestServer) 重置
端点 sd = 4294967295(套接字
关闭)
[调试] ajp_done::jk_ajp_common.c
(2905):回收连接池
工作 myTestServer 的 slot=0
[信息] jk_handler::mod_jk.c (2615):
服务错误=0
工人=我的测试服务器