当前位置: 首页 > 面试题库 >

NetConnection.Call.Failed偶尔在Flex3 / Tomcat / BlazeDS / Spring中发生

龚彬
2023-03-14
问题内容

我有一个很大的问题。我已经使用Flex3 / Tomcat / BlazeDS /
Spring编写了一个大型应用程序,该应用程序在本地开发时运行良好,当我部署到通用开发环境时效果很好,但是当部署到我们的测试环境时却经常失败。

当远程请求花费大量时间(超过20秒)时,故障似乎最容易发生。在我的开发服务器上,仅当请求花费很长时间(超过45秒)时才会发生错误。但是,错误有时也似乎立即发生(发送请求,但立即失败)。大多数错误也都有HTTP状态:错误502(错误网关),但有些错误只是说HTTP失败。

除了将war文件放入webapps目录外,我对BlazeDS并没有做任何特别的事情。通过https访问该应用程序。远程调用仅通过“目标”引用服务器。我们的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:管道损坏

我在我的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关闭或拒绝连接。尚未发送答复给客户端(尚未)

[info] ajp_service ::
jk_ajp_common.c(2447):(myTestServer)向tomcat发送请求失败(可恢复),(尝试= 2)

[错误] ajp_service :: jk_ajp_common.c(2466):(myTestServer)连接到tomcat失败。

[调试] ajp_reset_endpoint :: jk_ajp_common.c(743):(myTestServer)使用sd =
4294967295重置端点(套接字关闭)

[调试] ajp_done :: jk_ajp_common.c(2905):为工作程序myTestServer回收连接池插槽= 0

[info] jk_handler :: mod_jk.c(2615):worker = myTestServer的服务错误= 0


问题答案:

Cornel
Creanga帮助我找到了这个解决方案。我将应用程序切换为http,并开始在catalina.out文件中接收消息。我不知道为什么这会影响到它,但是确实如此。消息都说插座中的管道坏了。进一步调查显示,涉及到jk_mod。

通过大量搜索,我发现我们的SysAdmins在我们的TEST服务器上将服务器上的套接字超时设置为10秒,而在我们的DEV服务器上将套接字超时设置为5分钟,因此大量的搜索导致一旦到达TEST,它就会超时。

SysAdmins在TEST上调整了配置,以便另一个工作人员(超时5分钟)处理此上下文路径的调用。



 类似资料:
  • Spring BlazeDS Integration 可以用来简化开发基于 Spring 框架开发的Web应用,前端采用 Adobe Flex 开发的应用界面。它使用 Spring 的风格提供了对 Adobe BlazeDS 的支持。

  • BlazeDS是一个基于服务器的Java 远程控制(remoting)和Web消息传递(messaging)技术, 它能够使得后端的Java应用程序和运行在浏览器上的Adobe Flex应用程序相互通信。

  • 错误:函数中的错误(type,msg,asError=TRUE):Recv失败:对等点重置连接 附加基包:[1]stats4并行stats图形grDevices utils数据集方法基 RCurl版本:1.98-1.3

  • 我意外地发现一个Java进程的stat是T(被作业控制信号停止,或者因为它正在被跟踪)。我想它可能与有关,因为我当时运行了这个命令。然后我再次尝试运行,进程再次崩溃。但这并不容易复制。 有没有人知道为什么进程的stat变成了T而没有杀死-SIGSTOP?jinfo是否存在可能导致进程崩溃的错误? 编辑:我在运行超过60天的过程中100%复制了这个问题。如果进程已运行很长时间,则可能会触发该错误。它

  • 本文向大家介绍如何优化ListView(偶尔会问)相关面试题,主要包含被问及如何优化ListView(偶尔会问)时的应答技巧和注意事项,需要的朋友参考一下 ①Item布局,层级越少越好,使用hierarchyview工具查看优化。 ②复用convertView ③使用ViewHolder ④item中有图片时,异步加载 ⑤快速滑动时,不加载图片 ⑥item中有图片时,应对图片进行适当压缩 ⑦实现数

  • 我有一个入站RabbitMQ通道适配器,每天成功处理3000条消息,但是偶尔我会在RabbitMQ管理控制台看到1条未包装的消息。这似乎仍然是这样。 我确实有一个重试建议链,可以重试3次,然后通过死信路由密钥移动到DLQ,这对大多数例外情况都很有效。 在过去的几周里,unacked已经发生了两次,有一次我能够进行线程转储,并看到int-http:outbound-gateway调用在等待http响

  • 我们使用Assertj Swing3.9.2进行的gui单元测试偶尔会以难以重现的方式失败。有时整个测试套件是绿色的,有时一些测试用例失败。我们使用Ubuntu18.04LTS和GNOME两台不同的机器,我们得到了相同的错误。 抛出的异常有两个,并不时出现在不同的测试用例中: null null 此外,在不同的测试用例中,重复运行多次相同的测试可能会导致失败或成功。 特拉维斯-奇的测试也失败了。

  • 我有一个文件解析器代码,偶尔会在m.matches()上出现堆栈溢出错误(其中m是匹配器)。 我再次运行我的应用程序,它解析相同的文件,没有堆栈溢出。 我的模式确实有点复杂。它基本上是一组可选的零长度正lookahead,其中包含命名组,这样我就可以匹配一组变量名/值对,而不考虑它们的顺序。但我认为,如果某个字符串会导致堆栈溢出错误,它总是会导致它。。。不只是有时候。。。有什么想法吗? 我的模式