2016-04-28 24 views
0

我想發送一條消息到RabbitMQ安裝在我的localhost使用Spring 4但由於某種原因郵件沒有得到發送,我也沒有得到任何錯誤。它看起來我的彈簧配置(beans.xml)是不正確的。使用彈簧不能發送郵件到RabbitMQ

請指導。

的pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.0.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>4.0.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>4.0.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.0.2.RELEASE</version> 
    </dependency> 
    <!-- RabbitMQ --> 
    <dependency> 
     <groupId>org.springframework.amqp</groupId> 
     <artifactId>spring-rabbit</artifactId> 
     <version>1.5.5.RELEASE</version> 
    </dependency> 
</dependencies> 

的beans.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:c="http://www.springframework.org/schema/c" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:flow="http://www.springframework.org/schema/webflow-config" 
     xmlns:jee="http://www.springframework.org/schema/jee" 
     xmlns:jms="http://www.springframework.org/schema/jms" 
     xmlns:lang="http://www.springframework.org/schema/lang" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:rabbit="http://www.springframework.org/schema/rabbit" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd 
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
      http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd 
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd 
      http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.5.xsd"> 

    <bean id="helloWorld" class="com.study.jms.HelloWorld"> 
     <property name="message" value="Hello World (Spring-RabbitMQ)!" /> 
    </bean> 

    <rabbit:connection-factory id="rabbitConnectionFactory" host="localhost" username="guest" password="guest" port="5672"/> 
    <rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory"/> 
    <rabbit:admin connection-factory="rabbitConnectionFactory"/> 
    <rabbit:queue name="helloQueue"/> 

</beans> 

Main.java

public class Main { 

    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 
     HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); 

     //send message 
     System.out.println("Sending message...."); 
     AmqpTemplate template = context.getBean(AmqpTemplate.class); 
     template.convertAndSend(helloWorld.getMessage()); 
    } 

} 

HelloWorld.java

public class HelloWorld { 

    private String message; 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

} 
+0

你有沒有任何日誌? – randominstanceOfLivingThing

回答

2

你需要告訴的RabbitMQ如何路由消息。

由於您未創建交換或將隊列綁定到交換機,因此可以使用隊列名稱路由到默認交換機("")。

你要麼需要在模板routingKey財產(routing-key屬性)設置爲隊列名稱,或者你需要把它列入你的convertAndSend電話:

template.convertAndSend("", "helloQueue", helloWorld.getMessage()); 

的RabbitMQ僅丟棄已成功傳遞的消息到交換機但不會路由到任何隊列。

RabbitMQ Tutorials瞭解交流,路由等關鍵

Spring AMQP samples repo有教程的春天引導版本。

+0

工作:)謝謝! – user2325154