2014-10-08 142 views
1

我无法启动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)

回答

2

你是CRE在监听只监听基于VM传输的客户端的代理,但您的客户端使用默认连接URI“failover:tcp://127.0.0.1”,这意味着您的客户端将挂起,等待FailoverTransport连接到经纪人。您可能需要将连接工厂配置为使用“vm:// localhost”或将传输连接器配置更改为:

broker.addConnector("tcp://localhost:61616"); 
+0

谢谢您的快速回复 – Ayush 2014-10-08 11:35:06

相关问题