2016-04-28 13 views
0

Ich versuche, eine Nachricht an RabbitMQ auf meinem localhost mit Spring 4 installiert senden, aber aus irgendeinem Grund wird die Nachricht nicht gesendet und ich bekomme auch keinen Fehler. Es sieht für mich aus, dass meine Spring-Konfiguration (beans.xml) nicht korrekt ist.Nicht in der Lage, Nachrichten an RabbitMQ mit Spring senden

Bitte führen.

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

Hatten Sie eine Protokollierung? – randominstanceOfLivingThing

Antwort

2

Sie müssen RabbitMQ sagen, wie die Nachricht zu routen.

Da Sie keine Exchange erstellen oder die Warteschlange nicht an eine Exchange binden, können Sie mithilfe des Warteschlangennamens eine Route zum Standardaustausch ("") herstellen.

Sie müssen entweder die routingKey Eigenschaft (routing-key Attribut) auf der Vorlage zu dem Namen der Warteschlange setzen, oder Sie müssen es in Ihrem convertAndSend Aufruf enthalten:

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

RabbitMQ einfach fällt Nachrichten, die erfolgreich zugestellt werden zu einem Austausch, aber nicht zu einer Warteschlange geroutet.

Siehe RabbitMQ Tutorials Austausch zu verstehen, Routing-Schlüssel etc.

Die Spring AMQP samples repo has Spring Boot-Versionen der Tutorials.

+0

Das hat funktioniert :) Danke !!! – user2325154