2016-09-13 1 views
1

활성 MQ (버전 5.13.0)의 개별 대기열을 모니터링하는 Java 응용 프로그램이 있습니다. 이 응용 프로그램의 목적은 활성 MQ 브로커에 연결하여 특정 대기열에 대한 비행 중 메시지 수를 확인하는 것입니다. 비행 중 메시지 수가 50보다 크면 경고를 보냅니다. 이 응용 프로그램은 10 분마다이 검사를 수행합니다 (Quartz Scheduler 사용). 나는 AMQ에 연결하기 위해 IP 주소를 사용하는 AMQ 브로커에 연결하고, 나는 다음과 같은 스택 추적과 함께 IOException가받을 -JMX를 사용하여 Active-MQ에 원격 연결

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
     java.net.ConnectException: Connection refused: connect 
     at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) 
     at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) 
     at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) 
     at sun.rmi.server.UnicastRef.invoke(Unknown Source) 
     at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) 
     at javax.management.remote.rmi.RMIConnector.getConnection(Unknown Source) 
     at javax.management.remote.rmi.RMIConnector.connect(Unknown Source) 
     at javax.management.remote.JMXConnectorFactory.connect(Unknown Source) 
     at javax.management.remote.JMXConnectorFactory.connect(Unknown Source) 
     at com.globalcharge.quartz.job.CheckPendingConsumer.execute(CheckPendingConsumer.java:51) 
     at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
     at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) 
Caused by: java.net.ConnectException: Connection refused: connect 
     at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
     at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
     at java.net.PlainSocketImpl.connect(Unknown Source) 
     at java.net.SocksSocketImpl.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) 
     at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) 
     ... 12 more 

을 나는 동안 AMQ 브로커에 연결하려면 다음 코드를 사용하고 JMX

JMXServiceURL url = new  JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.11.72:1099/jmxrmi"); 
JMXConnector jmxc = JMXConnectorFactory.connect(url); 
MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 

ObjectName activeMq = new ObjectName("org.apache.activemq:Type=Broker,BrokerName=localhost"); 

BrokerViewMBean mbean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class, true); 
//for each queue 
for(ObjectName name : mbean.getQueues()) 
{ 
    if(("dbg.notmanager.netsizeDelivery".equals(name))) 
    { 
     //obtain an instance of QueueViewMBean 
     QueueViewMBean queueMbean = (QueueViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, QueueViewMBean.class, true); 
     long inFlight = queueMbean.getInFlightCount(); 
     if(inFlight >= 50) 
     { 
      sender.sendPassiveCriticalAlert(hostname, "Passive.GCDBG", "InFlight Messages for a consumer on " + name); 
     }   
} 

주 : 1. 나는 내 로컬 컴퓨터에 AMQ를 설치하고 작동 내 로컬 컴퓨터에서 실행중인 톰캣에 위의 코드를 배포하는 경우. 내 말은, 둘 다 (자바 클라이언트와 AMQ) 같은 기계에있을 때, 그것은 작동합니다.
2. 여기에 언급 된대로 AMQ 서버에 필요한 구성을 수행했습니다. configure JMX for ActiveMQ for remoting access 3. 텔넷을 통해 코드에 언급 된 IP 및 포트에 대한 연결을 확인했는데 작동합니다. 4. AMQ 서버 컴퓨터에 TCP 덤프를 기록했으며 거기에 도달하는 요청을 볼 수 있습니다. 5. Tomcat과 AMQ가 실행되는 두 시스템은 가상 시스템이 아니지만 동일한 네트워크의 전용 물리적 시스템입니다. 로그 Connection refused 말한대로

는 제발 도와주세요 :)

답변

0

나는 JConsole을뿐만 아니라 내가 쓴 자바 코드를 사용하여 현재 연결할 수 있어요 이러한 자격 증명이 필요합니다. 문제는 env 파일 (amqHome/bin/아래)에 값이 127.0.0.1 인 java.rmi.server.hostname이 있습니다. 이 값을 192.168.11.72 (컴퓨터의 IP)로 변경하고 작동했습니다 ....

모두에게 감사드립니다 ....

0

, 내가 연결 CONFIGS 오류를 생각합니다. 너무

JMXServiceURL url = ...; 
Map env = ...; 
String[] creds = {"admin", "activemq"}; 
env.put(JMXConnector.CREDENTIALS, creds); 
JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
+0

고맙습니다. 하지만 여전히 운이 없다 : ( –

+0

당신은 브로커 로그를 게시 할 수있다. ** 당신은 말할 수있다. ** Tomcat과 AMQ가 실행되는 두 머신 모두 가상 머신이 아니지만 동일한 네트워크의 전용 머신이다. ** 그러나 jmx는 localhost에 연결을 시도한다. (127.0.0.1), 당신은 여기에'JMXServiceURL ("서비스 : jmx : rmi : /// jndi/rmi : //192.168.11.72 : 1099/jmxrmi"),' –

+0

답장을 보내 주셔서 감사합니다. 다음과 같이 브로커 로그에 두 개의 WARN 로그 라인이 표시됩니다. –

관련 문제