2015-12-21 84 views
0

我想和ActiveMQ配置JMS在春天,這裏是我的發送方碼無法接收春季ActiveMQ消息

@Service 
public class SenderService implements ISenderService{ 

    @Bean 
    public ActiveMQConnectionFactory amqConnectionFactory() { 
     return new ActiveMQConnectionFactory(BROKER_URL); 
    } 

    @Bean 
    public Destination defaultDestination() { 
     return new ActiveMQQueue(MAILBOX_QUEUE); 
    } 

    @Bean 
    public JmsTemplate jmsTemplate() { 
     JmsTemplate jmsTemplate = new JmsTemplate(); 
     jmsTemplate.setDefaultDestination(defaultDestination()); 
     jmsTemplate.setConnectionFactory(amqConnectionFactory()); 
     return jmsTemplate; 
    } 

    public void send(final EmailMessage emailMessage) { 
     jmsTemplate().send(new MessageCreator() { 

      public Message createMessage(Session session) throws JMSException { 
       return session.createObjectMessage(emailMessage); 
      } 
     }); 
    } 

} 

當我檢查http://localhost:8161/admin/queues.jsp,我可以看到一個消息列表中的遞增,但是我我無法收到此消息。

@Component 
public class MessageConsumer implements MessageListener { 

    @JmsListener(destination = ISenderService.MAILBOX_QUEUE) 
    public void onMessage(Message arg0) { 
     System.out.println("MMMMMMMMMMMMMMMMMMMMMMMMMMMM"); 
    } 
} 

如果我創建了上面的類並嘗試在tomcat7上部署war,我看到下面的錯誤。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jmsListenerContainerFactory' is defined 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1168) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:281) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.jms.config.JmsListenerEndpointRegistrar.resolveContainerFactory(JmsListenerEndpointRegistrar.java:139) ~[spring-jms-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.jms.config.JmsListenerEndpointRegistrar.registerAllEndpoints(JmsListenerEndpointRegistrar.java:126) ~[spring-jms-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.jms.config.JmsListenerEndpointRegistrar.afterPropertiesSet(JmsListenerEndpointRegistrar.java:121) ~[spring-jms-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.jms.annotation.JmsListenerAnnotationBeanPostProcessor.afterSingletonsInstantiated(JmsListenerAnnotationBeanPostProcessor.java:185) ~[spring-jms-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:775) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5001) [catalina.jar:7.0.64] 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5517) [catalina.jar:7.0.64] 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.64] 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) [catalina.jar:7.0.64] 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) [catalina.jar:7.0.64] 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) [catalina.jar:7.0.64] 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095) [catalina.jar:7.0.64] 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930) [catalina.jar:7.0.64] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_60] 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_60] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_60] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60] 

回答

0

請參閱the documentation

你有這樣的框架知道如何連接起來的每個偵聽容器提供監聽器容器工廠 - 連接工廠等

如果你的應用程序是一個Spring Boot app春天開機就會連線一起來爲你自動。