2017-02-09 6 views

答えて

0

多分消費者/プロデューサーのすべてのセッションをクローズするorg.apache.activemq.ActiveMQMessageConsumer.close()またはorg.apache.activemq.ActiveMQConnection.close()を呼び出すことによって

UPDATEあなたはsee here

あなたのクライアントは、彼のフェールオーバーを使用している場合と考えてください、VisualVMのを使用し、stopメソッドを呼び出すことができます 自動的に再接続する

または以下のようなコード

は、IDによって1人の消費者を閉じますか、[リモート

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

私は自分の答えを更新しました。クライアントがフェールオーバーを使用している場合、自動的に再接続することを考慮してください –

関連する問題