我无法启动JMS连接,其中使用ActiveMQConnectionFactory创建连接。下面是我的代码:无法启动JMS连接
public static void main(String[] args) throws Exception {
BrokerService broker = new BrokerService();
try {
broker.setUseJmx(true);
broker.addConnector("vm://localhost:61616");
broker.start();
System.out.println("Broker started from EventManager >>>");
} catch (Exception e) {
e.printStackTrace();
}
try {
ProducerConsumer pc = ProducerConsumer.getInstance();
pc.sendMessage("TESTQ", "Hello");
} catch (Exception e) {
e.printStackTrace();
}
ProducerConsumer的Java类:
public static ProducerConsumer getInstance() throws Exception {
if(produceConsume == null) {
System.out.println(" synchronized Instanace created ");
produceConsume = new ProducerConsumer();
}
return produceConsume;
private ProducerConsumer() throws Exception
{
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(this.url);
try {
this.connection = connectionFactory.createConnection();
this.connection.start();
} catch (JMSException jms) {
throw new Exception("Exception when active MQ establishes connections....", jms);
}
}
的代码会卡在启动(),与线程转储我可以看到下面的堆栈
全螺纹转储Java HotSpot™64位服务器虚拟机(24.0-b28混合型 模式):
“ActiveMQ Task-1”守护程序prio = 10 tid = 0x00007fbe3c414800 NID = 0x3543在 的Object.wait()[0x00007fbe2a715000] java.lang.Thread.State中:在java.lang.Object.wait(母语 方法) TIMED_WAITING(对象监视器上) - 等待< 0x00000007d7443228>(一个java.lang.Object)在org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:954) - 锁定< 0x00000007d7443228>(org.apache.activemq.transport上的一个java.lang.Object) .failover.FailoverTransport $ 2.iterate(FailoverTransport.java:136) - 锁定<在org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:127)0x00000007d7443218>(一java.lang.Object继承) 在 org.apache.activemq.thread.PooledTaskRunner $ 1.run(PooledTa skRunner.java:48) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:603) 是java。 lang.Thread.run(Thread.java:722)
“ActiveMQConnection [ID:AYUSH-0791-50867-1412762440207-2:1]调度程序” 守护程序PRIO = 10 TID = 0x00007fbe3c413000 NID = 0x3542中的Object.wait () [0x00007fbe2a816000] java.lang.Thread.State:WAITING(在对象 监视器上)java.lang.Object.wait(Native Method) - 等待< 0x00000007d75d73a8>(java.util.TaskQueue)at java .lang.Object.wait(OBJE ct.java:503)在 java.util.TimerThread.mainLoop(Timer.java:526) - 锁定< 0x00000007d75d73a8>(一个java.util.TaskQueue)在java.util.TimerThread.run(Timer.java:505 )
“ActiveMQ代理[本地主机调度器” 守护程序PRIO = 10 TID = 0x00007fbe3c3e0000 NID = 0x3541中的Object.wait() [0x00007fbe2a917000] java.lang.Thread.State中:TIMED_WAITING(上在 对象监视器) java.lang.Object.wait(Native Method) - 等待< 0x00000007d93fa080>(java.util.TaskQueue)at java.util.TimerThread.mainLoop(Timer.java:552) - locked < 0x00000007d93fa080>(java .util.TaskQueue)在java.util.TimerThread.run (Timer.java:505)
“的ActiveMQ数据文件写入” 守护程序PRIO = 10 TID = 0x00007fbe3c3d1800 NID = 0x3540中的Object.wait()[0x00007fbe2aa18000]
java.lang.Thread.State中:WAITING(上对象监视器)在 java.lang.Object.wait(本机方法) - 在 java.lang.Object.wait(Object.java等待< 0x00000007d93fa3b8>(一个org.apache.kahadb.journal.DataFileAppender $ 1): 503)at org.apache.kahadb.journal.DataFileAppender。processQueue(DataFileAppender.java:312) - 锁定< 0x00000007d93fa3b8>(1 org.apache.kahadb.journal.DataFileAppender $)在 org.apache.kahadb.journal.DataFileAppender $ 2.run(DataFileAppender.java:203)“的ActiveMQ杂志检查点工作者” 守护程序PRIO = 10 TID = 0x00007fbe3c3cb000 NID = 0x353f等待条件 [0x00007fbe2ab19000] java.lang.Thread.State中:在java.lang.Thread.sleep TIMED_WAITING (睡眠)(本机方法)at org.apache.activemq.store.kahadb.MessageDatabase $ 3.run(MessageDatabase.java:296)
“KahaDB Scheduler”守护进程prio = 10 tid = 0x00007fbe3c3c1000 NID = 0x353e在 的Object.wait()[0x00007fbe2b32b000] java.lang.Thread.State中:在java.lang.Object.wait(母语 方法) TIMED_WAITING(对象监视器上) - 等待< 0x00000007d981f418>( (Timer.java:552) - 锁定< 0x00000007d981f418>(java.util.TaskQueue)java.util.TimerThread.run(Timer.java:505)java.util.TaskQueue(java.util.TaskQueue)java.util.TimerThread.run )
“RMI RenewClean- [192.168.57.33:47976]” 守护程序PRIO = 10 TID = 0x00007fbde0005800 NID = 0x353c中的Object.wait() [0x00007fbe2ad1b000] java.lang.Thread.State中:TIMED_WAITING(上 对象监视器)在java.lang .Object.wait(本机方法) - 在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) 等待< 0x00000007d9889870>(一java.lang.ref.ReferenceQueue $ LOCK) - 锁定< 0x00000007d9889870 >(一个java.lang.ref.ReferenceQueue $ Lock)at sun.rmi.transport.DGCClient $ EndpointEntry $ RenewCleanThread.run(DGCClient.java:535) at java.lang.Thread.run(Thread.java:722 )
“RMI调度程序(0)” 守护程序PRIO = 10 TID = 0x00007fbdf0024800 NID = 0x353b 等待条件[0x00007fbe2ae1c000] java.lang.Thread.State中:在sun.misc.Unsafe.park TIMED_WAITING(停车场) (本地方法) - 停车等待< 0x00000007850ffb10>(一java.util.concurrent.locks.AbstractQueuedSynchronizer中的$的ConditionObject) 在 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 在 java.util.concurrent中。 locks.AbstractQueuedSynchronizer $ ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082) 在 java.util.concurrent.ScheduledThreadPoolExecutor中的$ DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090) 在 java.util.concurrent.ScheduledThreadPoolExecutor中的$ DelayedWorkQueue.take( ScheduledThreadPoolExecutor.java:807) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:603) 在java.lang.Thread.run(线程。的java:722)
“GC守护进程” 守护程序PRIO = 10 TID = 0x00007fbdf0006800 NID = 0x3539在 的Object.wait()[0x00007fbe2b028000] java.lang.Thread.State中:在java的 TIMED_WAITING(对象监视器上)。 lang.Object.wait(本地 法) - 在sun.misc.GC $ Daemon.run(GC.java:117) 等待< 0x00000007850069b0>(一sun.misc.GC $ LatencyLock) - 锁定< 0x00000007850069b0> (太阳。misc.GC $ LatencyLock)
“RMI收割者” PRIO = 10 TID = 0x00007fbdf0004800 NID = 0x3538在 的Object.wait()[0x00007fbe2b129000] java.lang.Thread.State中:在java的WAITING (对象监视器上) .lang.Object.wait(Native Method) - 等待< 0x0000000785000b98>(一个java.lang.ref.ReferenceQueue $ Lock) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked < 0x0000000785000b98>(java.lang.ref.ReferenceQueue $ Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)at sun.rmi.transport.ObjectTable $ Reaper.run(ObjectTable.java: 351)at java.lang.Thread.run(Thread.java:722)
“RMI TCP接受-0” 守护程序PRIO = 10 TID = 0x00007fbdf0003000 NID = 0x3537 可运行的[0x00007fbe2b22a000] java.lang.Thread.State中:在 RUNNABLE在 java.net.PlainSocketImpl.socketAccept(本机方法) java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) at java.net.ServerSocket.implAccept(ServerSocket.java:522)at java.net.ServerSocket.accept(ServerSocket.java:490)at sun。 rmi.transport.tcp.TCPTransport $ AcceptLoop.executeAcceptLoop(TCPTransport.java:388) at sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.run(TCPTransport.java:360) at java.lang.Thread.run (Thread.java:722)
“RMI TCP的Accept-1099” 守护程序PRIO = 10 TID = 0x00007fbe3c318000 NID = 0x3535 可运行的[0x00007fbe2b42c000] java.lang.Thread.State中:在 RUNNABLE在 java.net.PlainSocketImpl.socketAccept(本机方法) java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 在java.net.ServerSocket.implAccept(ServerSocket.java:522)维持在 太阳 java.net.ServerSocket.accept(ServerSocket.java:490)。 rmi.transport.tcp.TCPTransport $ AcceptLoop.executeAcceptLoop(TCPTransport.java:388) at sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.run(TCPTransport.java:360) at java.lang.Thread.run (Thread.java:722)
“服务线程” 守护程序PRIO = 10 TID = 0x00007fbe3c097800 NID = 0x3533 可运行的[0x0000000000000000] java.lang.Thread.State中:RUNNABLE
“C2 CompilerThread1” 守护程序PRIO = 10 TID = 0x00007fbe3c095800 NID = 0x3532 等待条件[0x0000000000000000] java.lang.Thread.State中: RUNNABLE
“C2 CompilerThread0” 守护程序PRIO = 10 TID = 0x00007fbe3c092800 NID = 0x3531 等待条件[0x0000000000000000] java.lang.Thread.State中: RUNNABLE
“信号分派器” 守护程序PRIO = 10 TID = 0x00007fbe3c090800 NID = 0x3530 等待条件[0x0000000000000000] java.lang.Thread.State中: RUNNABLE
“终结” 守护程序PRIO = 10 TID = 0x00007fbe3c071800 NID = 0x352e在 Object.wait()[0x00007fbe389f8000] java.lang.Thread.State:WAITING (on object monitor)at java.lang.Object.wait(Native Method) - 等待< 0x000000078500efa8>(java.lang.String参考Queue $锁)在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - 锁定< 0x000000078500efa8>(Java的java.lang.ref.ReferenceQueue $锁)。lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)在 java.lang.ref.Finalizer $ FinalizerThread.run(Finalizer.java:177)
“参考处理程序” 守护程序PRIO = 10 TID = 0x00007fbe3c06f800 NID = 0x352d Object.wait()[0x00007fbe38af9000] java.lang.Thread.State: WAITING(在对象监视器上)java.lang.Object.wait(Native Method) - 等待< 0x000000078500ee20>(java。 lang.ref.Reference $ Lock)at java.lang.Object.wait(Object.java:503)at java.lang.ref.Reference $ ReferenceHandler.run(Reference.java:133) - locked < 0x000000078500ee20>(一个java.lang.ref.Reference $ Lock)
Object.wait()方法中使用的java.lang.Thread.State:TIMED_WAITING(在 对象监视器上)Object.wait()中的“main”prio = 10 tid = 0x00007fbe3c00c000 nid = 0x3523() [0x00007fbe44f01000] ) - 在org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java:516) 等待< 0x00000007d7443208>(一个java.lang.Object中) - 锁定< 0x00000007d7443208>(一个java.lang.Object中)at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40) - 锁定< 0x00000007d75642c8>(org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java(java.lang.Object)) :81) at org.apache.activemq.transport.Resp onseCorrelator.request(ResponseCorrelator.java:86) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1284) 在 org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1392) - 锁定< 0x00000007d75a9aa8>在 test.ProducerConsumer.getInstance(一个java.lang.Object中)在org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:504) 在test.ProducerConsumer。(ProducerConsumer.java:37)( ProducerConsumer.java:16)在 test.ActiveMQTest.main(ActiveMQTest.java:31)
谢谢您的快速回复 – Ayush 2014-10-08 11:35:06