Использование 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 в конечном итоге исчерпывает потоки, поскольку он обслуживает все больше и больше сообщений.Сообщения передаются асинхронно, поэтому они не должны ожидать подтверждений.
То, что я пробовал:
- Добавление advisorySupport = "false" в конфигурацию брокера и jms.watchTopicAdvisories = false для URL-адресов клиентских подключений.Это фактически запрещает ESB подключаться к посреднику вообще.
- Настройка подключаемых модулей проверки подлинности и авторизации в конфигурации посредника, чтобы клиенты не могли создавать очереди или разделы "ActiveMQ.Advisory.>".Это просто не позволило ESB создавать какие-либо очереди вообще.
Как я могу запретить ESB / брокеру создавать эти темы, в то же время позволяя создавать и использовать сообщения в реальных очередях или, по крайней мере,ESB / брокер каким-либо образом закрывает соединение?