ActiveMQ连接被拒绝。

22

我正在尝试在我的应用程序中使用activemq,但当我尝试连接到localhost时一直遇到错误:

我在应用程序中使用activemq时遇到连接localhost的问题。

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
    at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
    at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534)
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:526)
    at sender.MessageSender.sendMessage(MessageSender.java:16)
    at sender.SenderMain.main(SenderMain.java:13)
Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:293)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:238)
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:184)
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:456)
    ... 4 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at org.apache.activemq.transport.tcp.TcpTransport.connect(TcpTransport.java:504)
    at org.apache.activemq.transport.tcp.TcpTransport.doStart(TcpTransport.java:467)
    at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
    at org.apache.activemq.transport.AbstractInactivityMonitor.start(AbstractInactivityMonitor.java:132)
    at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)
    at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:72)
    at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)
    at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)
    ... 8 more

有一个文件需要运行才能启动它(ActiveMQ),在 Windows 计算机上是一个 .bat 文件。运行它后,它就会开始运行并保持在命令提示符中。

我在家里使用 Mac,在终端上使用相应的 Mac 版本时,终端只会打印:

Last login: Mon Oct 29 19:57:15 on ttys000
(null):~ rickilambert$ /Users/rickilambert/Downloads/apache-activemq-5.7.0/bin/macosx/activemq ; exit;
Usage: /Users/rickilambert/Downloads/apache-activemq-5.7.0/bin/macosx/activemq { console | start | stop | restart | status | dump }
logout

[Process completed]

有人可以帮我让这个东西运行起来吗?


1
@BrianRoach 我觉得原帖作者在演示他的Mac OS机器上的用法,问题出在Windows上。 - dan
@dan - 他正在尝试在他的mac上启动activemq。然而,他没有按照提示信息去操作并忽略了这些信息。由于他还没有启动它,所以他的应用程序无法连接到它。 - Brian Roach
我是一位新的 Mac 用户,习惯使用 Windows,因此不确定应该如何开始。 - Biscuit128
@SkyR - 请阅读我的第一条评论。以及当您没有给它选项时收到的“Usage:”消息。您必须将“start”传递给它。 - Brian Roach
好的,我需要从命令行运行文件,而不是双击它。好的,让我试试。 - Biscuit128
显示剩余2条评论
3个回答

19

您的应用程序无法连接到activemq。请检查您的activemq是否正在localhost 61616上运行和侦听。

您可以尝试使用netstat -a检查activemq进程是否已启动。或者尝试检查是否可以通过管理页面访问您的actvemq:localhost:8161/admin/queues.jsp

在Mac上,您将使用以下方式启动activemq:

$ACTMQ_HOME/bin/activemq start 

或者如果你的配置文件(activemq.xml)位于另一个位置,你可以使用:

$ACTMQ_HOME/bin/activemq start xbean:file:${location_of_your_config_file}

在您的情况下,可执行文件位于:bin/macosx/activemq,因此您需要使用:$ACTMQ_HOME/bin/macosx/activemq start


很抱歉要这么麻烦,但我收到了“没有这样的文件或目录”的错误提示,尽管我知道该文件确实存在。 - Biscuit128
@SkyR 刚刚我注意到你的可执行文件在 bin/macosx/activemq 下。我已经更新了我的回答。 - dan
哈哈,谢谢。这已经有了一点点不同。它表明现在正在运行,但我仍然得到相同的异常(null):macosx rickilambert$ ./activemq start 正在启动ActiveMQ代理... - Biscuit128
@SkyR,你可以在日志中检查服务器是否已启动。此外,你也可以使用我在答案中提供的URL来检查服务器是否已启动。通常,在发出启动命令后,它需要一两秒钟才能启动。 - dan

5

当我使用以下代码获取连接工厂时,遇到了类似的问题:

ConnectionFactory factory = new ActiveMQConnectionFactory("admin","admin","tcp://:61616");

当我将其更改为以下内容时,问题得到解决:

ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://:61616");

然后以下内容显示我的Q大小正在增加:

http://:8161/admin/queues.jsp


0

我也遇到了类似的问题。在我的情况下,brokerUrl没有正确配置。这就是为什么我收到以下错误的原因:

Cause: Error While attempting to add new Connection to the pool: nested exception is javax.jms.JMSException: Could not connect to broker URL : tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused

& 我按照以下方法解决了它。

   ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();

  connectionFactory.setBrokerURL("tcp://hostname:61616");
  connectionFactory.setUserName("admin");
  connectionFactory.setPassword("admin");

我不理解这是如何工作的。参考文档中说:“如果代理存在,则会自动启动和配置嵌入式代理(前提是没有通过配置指定代理URL)”。但是你已经指定了代理URL,这意味着Spring Boot不会启动嵌入式代理。你是否在使用嵌入式代理? - MiguelMunoz
请阅读此文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-messaging.html - Narayan Yerrabachu
在我的情况下,我想运行我创建的实例。这就是为什么我提供了URL。如果未提供spring.activemq.broker-url,则Spring Boot将实例化默认值。 - Narayan Yerrabachu
检查Activemq是否已启动,使用以下命令:netstat -a - Narayan Yerrabachu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接