【问题标题】:Spring JMS with ActiveMQ带有 ActiveMQ 的 Spring JMS
【发布时间】:2014-12-24 05:45:24
【问题描述】:

我在尝试发布到我的队列时收到以下错误:

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: http://localhost:8161. Reason: java.io.IOException: Failed to perform GET on: http://localhost:8161 as response was: Not Found
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:496)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:568)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:657)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:648)
at com.spring.tutorials.amq.MessageSender.send(MessageSender.java:14)
at com.spring.tutorials.amq.Run.main(Run.java:24)

Caused by: javax.jms.JMSException: Could not connect to broker URL: http://localhost:8161. Reason: java.io.IOException: Failed to perform GET on: http://localhost:8161 as response was: Not Found
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:358)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:303)
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:243)
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:483)
... 5 more

Caused by: java.io.IOException: Failed to perform GET on: http://localhost:8161 as response was: Not Found
at org.apache.activemq.transport.http.HttpClientTransport.doStart(HttpClientTransport.java:279)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
at org.apache.activemq.transport.AbstractInactivityMonitor.start(AbstractInactivityMonitor.java:138)
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:338)
... 9 more

当我直接在浏览器中输入 URL 时,我可以毫无问题地访问管理屏幕。

有什么想法吗?

这是我的配置:

active-mq-context.xml

<!-- Connection Factory Definition -->

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="http://localhost:8161" />
</bean>

<!-- Destination Definition -->

<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="MyTestQueue" />
</bean>

<!-- JMS Template Definition -->

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="destination" />
</bean>

<!-- Message Sender Definition -->

<bean id="messageSender" class="com.spring.tutorials.amq.MessageSender">
    <property name="jmsTemplate" ref="jmsTemplate" />
</bean>

MessageSender.java

package com.spring.tutorials.amq;

import org.springframework.jms.core.JmsTemplate;

public class MessageSender {

    private JmsTemplate jmsTemplate;

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void send(final Object Object) {
        jmsTemplate.convertAndSend(Object);
    }

}

Run.java

package com.spring.tutorials.amq;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Run {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("active-mq-context.xml");

        MessageSender messageSender = (MessageSender) context.getBean("messageSender");

        Map<String,String> message = new HashMap<String,String>();
        message.put("message1", "Hello");
        message.put("message2", "World");

        messageSender.send(message);
    }
}

谢谢!

【问题讨论】:

    标签: java spring jms activemq spring-jms


    【解决方案1】:

    默认情况下,ActiveMQ 在端口 61616 上使用 TCP transport,这就是 brokerURL 应该指向的...

    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>
    

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 2016-07-09
      • 2014-08-23
      • 2019-04-02
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多