2017-02-09 1 views
2

Мне нужно протестировать конкретный сценарий, закрыв потребительский сокет Active-MQ, не убивая клиентский процесс Java и сервер Active-MQ. Каков наилучший способ закрыть конкретный сокет между клиентом JAVA и очередью Active-MQ?Как закрыть конкретный сокет между клиентом JAVA и очередью Active-MQ

ответ

0

возможно, позвонив org.apache.activemq.ActiveMQMessageConsumer.close() или org.apache.activemq.ActiveMQConnection.close() закрыть все сеансы потребителей/производителей

UPDATE вы можете использовать VisualVM и вызовите метод остановки, see here

Пожалуйста, обратите внимание, что если ваш клиент использует восстановление после отказа он будет автоматически подключаться автоматически

или кодом, указанным ниже

закрыть 1 потребитель по ID или RemoteAddress

import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 

import javax.management.MBeanServerConnection; 
import javax.management.MBeanServerInvocationHandler; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 
import javax.management.remote.JMXServiceURL; 

import org.apache.activemq.broker.jmx.ConnectionViewMBean; 

public class JMXCloseConsumer { 

    public static void main(String[] args) throws Exception { 
     JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); 
     Map<String, String[]> env = new HashMap<>(); 
     String[] creds = { "admin", "admin" }; 
     env.put(JMXConnector.CREDENTIALS, creds); 
     JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
     MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 
     ObjectName conName = new ObjectName(
       "org.apache.activemq:type=Broker,brokerName=localhost,connector=clientConnectors,connectorName=openwire,connectionViewType=clientId,connectionName=*"); 
     Set connections = conn.queryNames(conName, null); 
     Object[] c = connections.toArray(); 
     for (int s = 0; s < c.length; s++) { 
      ObjectName con = (ObjectName) c[s]; 
      System.out.println(con.toString()); 
      ConnectionViewMBean connectionView = MBeanServerInvocationHandler.newProxyInstance(conn, con, 
        ConnectionViewMBean.class, true); 
      String address = connectionView.getRemoteAddress(); 
      System.out.println(address); 
      connectionView.stop(); 
     } 
    } 
} 

закрыть все потребители по имени разъема

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

import javax.management.MBeanServerConnection; 
import javax.management.MBeanServerInvocationHandler; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 
import javax.management.remote.JMXServiceURL; 

import org.apache.activemq.broker.jmx.BrokerViewMBean; 
import org.apache.activemq.broker.jmx.ConnectorViewMBean; 

public class JMXCloseAllConsumers { 

    public static void main(String[] args) throws Exception { 
     JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); 
     Map<String, String[]> env = new HashMap<>(); 
     String[] creds = { "admin", "admin" }; 
     env.put(JMXConnector.CREDENTIALS, creds); 
     JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
     MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 
     ObjectName activeMq = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); 
     BrokerViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class, 
       true); 
     Map<String, String> props = mbean.getTransportConnectors(); 
     for (Iterator<?> iter = props.keySet().iterator(); iter.hasNext();) { 
      String name = (String) iter.next(); 
      String value1 = props.get(name); 
      System.out.println(value1); 
      ObjectName connector = new ObjectName(
        "org.apache.activemq:type=Broker,brokerName=localhost,connector=clientConnectors,connectorName=" 
          + name); 

      ConnectorViewMBean connectorViewMBean = MBeanServerInvocationHandler.newProxyInstance(conn, connector, 
        ConnectorViewMBean.class, true); 
      System.out.println(connectorViewMBean.connectionCount()); 
      if (connectorViewMBean.connectionCount() > 0) { 
       connectorViewMBean.stop(); 
      } 
     } 
    } 
} 

или

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 

import javax.management.MBeanServerConnection; 
import javax.management.MBeanServerInvocationHandler; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 
import javax.management.remote.JMXServiceURL; 

import org.apache.activemq.broker.jmx.BrokerViewMBean; 
import org.apache.activemq.broker.jmx.ConnectionViewMBean; 
import org.apache.activemq.broker.jmx.ConnectorViewMBean; 

public class JMXCloseAllConsumers { 

    public static void main(String[] args) throws Exception { 
     JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); 
     Map<String, String[]> env = new HashMap<>(); 
     String[] creds = { "admin", "admin" }; 
     env.put(JMXConnector.CREDENTIALS, creds); 
     JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
     MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 
     ObjectName activeMq = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); 
     BrokerViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class, 
       true); 
     Map<String, String> props = mbean.getTransportConnectors(); 
     for (Iterator<?> iter = props.keySet().iterator(); iter.hasNext();) { 
      String name = (String) iter.next(); 
      System.out.println(name); 
      ObjectName connector = new ObjectName(
        "org.apache.activemq:type=Broker,brokerName=localhost,connector=clientConnectors,connectorName=" 
          + name); 
      ConnectorViewMBean connectorViewMBean = MBeanServerInvocationHandler.newProxyInstance(conn, connector, 
        ConnectorViewMBean.class, true); 
      System.out.println(connectorViewMBean.connectionCount()); 
      if (connectorViewMBean.connectionCount() > 0) { 
       ObjectName conName = new ObjectName(
         "org.apache.activemq:type=Broker,brokerName=localhost,connector=clientConnectors,connectorName=" 
           + name + ",connectionViewType=clientId,connectionName=*"); 
       Set connections = conn.queryNames(conName, null); 
       Object[] c = connections.toArray(); 
       for (int s = 0; s < c.length; s++) { 
        ObjectName con = (ObjectName) c[s]; 
        System.out.println(con.toString()); 
        ConnectionViewMBean connectionView = MBeanServerInvocationHandler.newProxyInstance(conn, con, 
          ConnectionViewMBean.class, true); 
        String address = connectionView.getRemoteAddress(); 
        System.out.println(address); 
        connectionView.stop(); 
       } 
       connectorViewMBean.stop(); 
      } 
     } 
    } 
} 
+0

для этого мне нужно изменить код производства платформы который не разрешен. Нам нужно убить его из внешнего класса java или команды * nix. – Mrityunjay

+0

Я обновил свой ответ, учтите, что если ваш клиент использует отказоустойчивость, он автоматически подключится –

Смежные вопросы