WSO2 ESB создает слишком много временных консультативных тем в ActiveMQ - PullRequest
0 голосов
/ 10 мая 2019

Использование 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 в очереди. Вот как это выглядит под информацией о соединении.

Затем соединение, к которому присоединен этот временный раздел, остается как поток RUNNABLE в JVM и никогда не завершается.Ни 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" в конфигурацию брокера и jms.watchTopicAdvisories = false для URL-адресов клиентских подключений.Это фактически запрещает ESB подключаться к посреднику вообще.
  2. Настройка подключаемых модулей проверки подлинности и авторизации в конфигурации посредника, чтобы клиенты не могли создавать очереди или разделы "ActiveMQ.Advisory.>".Это просто не позволило ESB создавать какие-либо очереди вообще.

Как я могу запретить ESB / брокеру создавать эти темы, в то же время позволяя создавать и использовать сообщения в реальных очередях или, по крайней мере,ESB / брокер каким-либо образом закрывает соединение?

1 Ответ

0 голосов
/ 14 мая 2019

После примерно недели диагностики решение состояло в том, чтобы обновить JAR-файл axis2-transport-jms до новейшей версии на WSO2 Transports GitHub .

Это должно бытьупал в каталог $CARBON_HOME/repository/components/lib, а старый в $CARBON_HOME/repository/components/plugins должен быть удален.

...