【问题标题】:WSO2 ESB Creates Too Many Temporary Advisory Topics in ActiveMQWSO2 ESB 在 ActiveMQ 中创建了太多临时咨询主题
【发布时间】:2019-09-27 18:56:31
【问题描述】:

使用 WSO2 ESB 4.9.0 和 ActiveMQ 5.15.9。

这一切都始于我将 ESB 从 4.8.0 升级到 4.9.0。 ESB 既充当生产者又充当消费者,并使用非阻塞 tcp 或 SSL 连接。

每次 ESB 建立连接以产生或使用消息时,都会创建一个临时主题“ActiveMQ.Advisory.TempQueue,ActiveMQ.Advisory.TempTopic”,它只是坐在那里,没有消息通过它,即 0入队和 0 出队。 Here is what it looks like under the connection information.

然后,附加此临时主题的连接在 JVM 中仍然作为 RUNNABLE 线程,并且永远不会退出。 ESB 和代理都不会尝试关闭此连接。线程本身似乎在读取套接字上旋转:

java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at com.rsa.sslj.x.ap.c(Unknown Source)
        at com.rsa.sslj.x.ap.a(Unknown Source)
        at com.rsa.sslj.x.ap.b(Unknown Source)
        at com.rsa.sslj.x.ap.b(Unknown Source)
        at com.rsa.sslj.x.al.read(Unknown Source)
        at org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50)
        at org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:634)
        at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:59)
        at org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:619)
        at java.io.DataInputStream.readInt(DataInputStream.java:387)
        at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268)
        at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240)
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232)
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

这会导致 ESB 最终耗尽线程,因为它服务的消息越来越多。消息是异步传递的,因此它们不应等待确认。

我尝试过的事情:

  1. 在代理配置中添加advisorySupport="false",在客户端连接URL 中添加jms.watchTopicAdvisories=false。这实际上完全阻止了 ESB 连接到代理。
  2. 将代理配置中的身份验证和授权插件设置为不允许客户端创建“ActiveMQ.Advisory.>”队列或主题。这只是阻止了 ESB 创建任何队列。

如何防止 ESB/代理创建这些主题,同时仍然允许在实际队列上生成和使用消息,或者至少让 ESB/代理以某种方式关闭连接?

【问题讨论】:

    标签: multithreading wso2 activemq wso2esb


    【解决方案1】:

    经过大约一周的诊断后,解决方案是将axis2-transport-jms JAR 升级到WSO2 Transports GitHub 上的最新版本。

    必须放到$CARBON_HOME/repository/components/lib目录下,$CARBON_HOME/repository/components/plugins中的旧目录要删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多