Мне нужно протестировать конкретный сценарий, закрыв потребительский сокет Active-MQ, не убивая клиентский процесс Java и сервер Active-MQ. Каков наилучший способ закрыть конкретный сокет между клиентом JAVA и очередью Active-MQ?Как закрыть конкретный сокет между клиентом JAVA и очередью Active-MQ
2
A
ответ
0
возможно, позвонив org.apache.activemq.ActiveMQMessageConsumer.close()
или org.apache.activemq.ActiveMQConnection.close()
закрыть все сеансы потребителей/производителей
UPDATE вы можете использовать VisualVM и вызовите метод остановки,
Пожалуйста, обратите внимание, что если ваш клиент использует восстановление после отказа он будет автоматически подключаться автоматически
или кодом, указанным ниже
закрыть 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();
}
}
}
}
Смежные вопросы
- 1. Как получить конкретный сокет и закрыть его
- 2. Передача XML через сокет между сервером и клиентом в java
- 3. Как закрыть клиентский сокет в java?
- 4. Связь между клиентом python и сервером java
- 5. Разница между линейной очередью и круговой очередью
- 6. ActiveMQ сервлетные соединиться с Java клиентом
- 7. сокет между C++ и Java
- 8. Высокопроизводительные сообщения между Java-клиентом и Java «Back End»
- 9. Сохранять связь между сервером и клиентом - Java
- 10. Как определить конкретный сокет между User Space и Kernel Space?
- 11. Как закрыть блокированный сокет
- 12. Как правильно закрыть неблокирующий сокет?
- 13. Разница между клиентом приложения и автономным клиентом
- 14. Как смоделировать разъединение сокета (в окнах) между клиентом и сервером?
- 15. Путаница на разницу между Java-клиентом и Java-сервером
- 16. Как выполнить синхронизацию между клиентом и сервером
- 17. Java-сокет Соединение с клиентом и сервером отказалось от выпуска
- 18. Требуется закрыть соединение ActiveMq
- 19. Связь между java-сервером и клиентом Matlab
- 20. Связь между сервером Java и клиентом
- 21. Java sync Файлы между FTP и клиентом
- 22. Связь между Java-сервером и PHP-клиентом
- 23. В чем разница между «очередью цикла событий» и «очередью заданий»?
- 24. Разница между порядком работы, очередью ввода и готовой очередью?
- 25. Можно ли связать сокет с очередью NIC?
- 26. Сокет, связанный между приложениями java и C#
- 27. Разница между клиентом SIP и клиентом IMS
- 28. Какова основная разница между стеком и очередью?
- 29. Сокет Java: связь между клиентом и сервером застряла в многопоточности, если более 1 клиент
- 30. Правильно закрыть TCP-сокет
для этого мне нужно изменить код производства платформы который не разрешен. Нам нужно убить его из внешнего класса java или команды * nix. – Mrityunjay
Я обновил свой ответ, учтите, что если ваш клиент использует отказоустойчивость, он автоматически подключится –