与 JMS 代理的连接失败
Connection to JMS broker failing
我有一个 Glassfish 服务器 (4.1.2) 并按照 this tutorial I have integrated Apache ActiveMQ to the server. Afterwards I developed a standalone Client for messaging according to this part of the same tutorial. Finished with that I followed the last part of this tutorial 开发一个 MessageDrivenBean 来监听前面步骤中使用的队列。
编译一切正常。 ActiveMQ 也是运行。但是每当我部署 EJB 时,我的 GF 服务器日志中都会记录以下内容:
Info: visiting unvisited references
Info: visiting unvisited references
Info: JTS5014: Recoverable JTS instance, serverId = [3700]
Warning: RAR8000 : The method setDestinationLookup is not present in the class : org.apache.activemq.ra.ActiveMQActivationSpec
Warning: RAR7097: No setter method present for the property destinationLookup in the class org.apache.activemq.ra.ActiveMQActivationSpec
Info: 2017-06-06 11:43:00,675 [min-listener(1)] INFO ActiveMQEndpointWorker - Starting
Info: 2017-06-06 11:43:00,682 [ad-pool-1; w: 4] INFO ActiveMQEndpointWorker - Establishing connection to broker [vm://0.0.0.0:6616]
Info: WELD-000900: 2.2.13 (Final)
WARN: WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
WARN: WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
Info: AmdMDB was successfully deployed in 5.290 milliseconds.
Info: 2017-06-06 11:43:31,695 [ad-pool-1; w: 4] ERROR ActiveMQEndpointWorker - Failed to connect to broker [vm://0.0.0.0:6616]: Could not create Transport. Reason: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
javax.jms.JMSException: Could not create Transport. Reason: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:260)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:194)
at org.apache.activemq.ra.ActiveMQResourceAdapter.makeConnection(ActiveMQResourceAdapter.java:132)
at org.apache.activemq.ra.ActiveMQEndpointWorker.run(ActiveMQEndpointWorker.java:109)
at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:107)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.checkChars(URI.java:3021)
at java.net.URI$Parser.checkChar(URI.java:3031)
at java.net.URI$Parser.parse(URI.java:3047)
at java.net.URI.<init>(URI.java:588)
at org.apache.activemq.util.URISupport.parseComposite(URISupport.java:390)
at org.apache.activemq.util.URISupport.parseComposite(URISupport.java:279)
at org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:63)
at org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:54)
at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:64)
at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:258)
... 7 more
Info: 2017-06-06 11:43:31,697 [ad-pool-1; w: 4] ERROR ActiveMQEndpointWorker - Endpoint will try to reconnect to the JMS broker in 30 seconds
Info: 2017-06-06 11:43:40,060 [jb-thread-pool1] INFO ActiveMQEndpointWorker - Stopping
最后的 Stopping 是因为我没有部署,因为每 30 秒重新连接尝试时会出现同样的错误。
不太清楚,哪里出错了。端口是 6616 顺便说一下,这不是打字错误,它是 ActiveMQ 所在的实际端口 运行 因为端口 61616 正在被另一个进程使用。
能否请你给我一个提示,在哪里搜索错误?
顺便说一句:当我使用独立客户端向队列发送消息时,没有抛出任何异常(所以这似乎有效。)但是,我也无法通过 ActiveMQ 管理控制台发送消息到服务器。
非常感谢...
根据http://activemq.apache.org/vm-transport-reference.html,使用activemq vm tranport时,应该是"vm://"后的broker名称。
如果要使用ip和端口,这样配置:
vm:(broker:(tcp://localhost:6000)?persistent=false)?marshal=false
我有一个 Glassfish 服务器 (4.1.2) 并按照 this tutorial I have integrated Apache ActiveMQ to the server. Afterwards I developed a standalone Client for messaging according to this part of the same tutorial. Finished with that I followed the last part of this tutorial 开发一个 MessageDrivenBean 来监听前面步骤中使用的队列。
编译一切正常。 ActiveMQ 也是运行。但是每当我部署 EJB 时,我的 GF 服务器日志中都会记录以下内容:
Info: visiting unvisited references
Info: visiting unvisited references
Info: JTS5014: Recoverable JTS instance, serverId = [3700]
Warning: RAR8000 : The method setDestinationLookup is not present in the class : org.apache.activemq.ra.ActiveMQActivationSpec
Warning: RAR7097: No setter method present for the property destinationLookup in the class org.apache.activemq.ra.ActiveMQActivationSpec
Info: 2017-06-06 11:43:00,675 [min-listener(1)] INFO ActiveMQEndpointWorker - Starting
Info: 2017-06-06 11:43:00,682 [ad-pool-1; w: 4] INFO ActiveMQEndpointWorker - Establishing connection to broker [vm://0.0.0.0:6616]
Info: WELD-000900: 2.2.13 (Final)
WARN: WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
WARN: WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
Info: AmdMDB was successfully deployed in 5.290 milliseconds.
Info: 2017-06-06 11:43:31,695 [ad-pool-1; w: 4] ERROR ActiveMQEndpointWorker - Failed to connect to broker [vm://0.0.0.0:6616]: Could not create Transport. Reason: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
javax.jms.JMSException: Could not create Transport. Reason: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:260)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:194)
at org.apache.activemq.ra.ActiveMQResourceAdapter.makeConnection(ActiveMQResourceAdapter.java:132)
at org.apache.activemq.ra.ActiveMQEndpointWorker.run(ActiveMQEndpointWorker.java:109)
at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:107)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0: 0.0.0.0:6616
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.checkChars(URI.java:3021)
at java.net.URI$Parser.checkChar(URI.java:3031)
at java.net.URI$Parser.parse(URI.java:3047)
at java.net.URI.<init>(URI.java:588)
at org.apache.activemq.util.URISupport.parseComposite(URISupport.java:390)
at org.apache.activemq.util.URISupport.parseComposite(URISupport.java:279)
at org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:63)
at org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:54)
at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:64)
at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:258)
... 7 more
Info: 2017-06-06 11:43:31,697 [ad-pool-1; w: 4] ERROR ActiveMQEndpointWorker - Endpoint will try to reconnect to the JMS broker in 30 seconds
Info: 2017-06-06 11:43:40,060 [jb-thread-pool1] INFO ActiveMQEndpointWorker - Stopping
最后的 Stopping 是因为我没有部署,因为每 30 秒重新连接尝试时会出现同样的错误。
不太清楚,哪里出错了。端口是 6616 顺便说一下,这不是打字错误,它是 ActiveMQ 所在的实际端口 运行 因为端口 61616 正在被另一个进程使用。
能否请你给我一个提示,在哪里搜索错误?
顺便说一句:当我使用独立客户端向队列发送消息时,没有抛出任何异常(所以这似乎有效。)但是,我也无法通过 ActiveMQ 管理控制台发送消息到服务器。
非常感谢...
根据http://activemq.apache.org/vm-transport-reference.html,使用activemq vm tranport时,应该是"vm://"后的broker名称。
如果要使用ip和端口,这样配置:
vm:(broker:(tcp://localhost:6000)?persistent=false)?marshal=false