春季RabbitMQ Hello World

时间:2018-12-05 13:24:21

标签: java spring maven rabbitmq

我想通过本地RabbitMQ队列发送消息。只是一个“ Hello World”。并在同一程序中接收。

我正在关注本教程RabbitMQ Tutorial,该教程说明了如何执行此操作。我至少做了5次本教程,但从未成功。我正在做日食。我正在使用Maven进行构建,并且在此过程中没有错误。但是当我启动它时,它什么都没有。

这是输出:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.1.1.RELEASE)

Ready ... running for 10000ms

但是什么也没发生。我写的代码像本教程一样。实际上,我从他的存储库Github Repository下载RabbitMQ代码,但没有尝试。

我做错了什么?

更新

我的代码就像教程一样。我的第一个包裹是:org.springframework.amqp.tutorials.rabbitmqamqptutorials

我将以下代码放入包装中:

RabbitAmqpTutorialsRunner.java:

package org.springframework.amqp.tutorials.rabbitmqamqptutorials;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.tutorials.tut1.Tut1Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;


public class RabbitAmqpTutorialsRunner implements CommandLineRunner {

@Value("${tutorial.client.duration:0}")
private int duration;

@Autowired
private ConfigurableApplicationContext ctx;

@Override
public void run(String... arg0) throws Exception {
    System.out.println("Ready ... running for " + duration + "ms");
    Thread.sleep(duration);
    ctx.close();
}

}

RabbitAmqpTutorialsApplication.java:

package org.springframework.amqp.tutorials.rabbitmqamqptutorials;

 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.amqp.rabbit.annotation.EnableRabbit;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Profile;
 import org.springframework.scheduling.annotation.EnableScheduling;



 @EnableRabbit 
 @SpringBootApplication
 @EnableScheduling
 public class RabbitmqAmqpTutorialsApplication {

 @Profile("usage_message")
    @Bean
    public CommandLineRunner usage() {
        return new CommandLineRunner() {

            @Override
            public void run(String... arg0) throws Exception {
                System.out.println("This app uses Spring Profiles to control its behavior.\n");
                System.out.println("Sample usage: java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender");
            }
        };
    }

    @Profile("!usage_message")
    @Bean
    public CommandLineRunner tutorial() {
        return new RabbitAmqpTutorialsRunner();
    }

    public static void main(String[] args) throws Exception {


        SpringApplication.run(RabbitmqAmqpTutorialsApplication.class, "java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender");
    }

}

我还有另一个具有三个类别的软件包org.springframework.amqp.tutorials.tut1

Tut1Config.java:

package org.springframework.amqp.tutorials.tut1;

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Queue;

import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;




@Profile({"tut1","hello-world"})
@Configuration
public class Tut1Config {

    @Bean
    public Queue hello() {
        return new Queue("hello");
    }

    @Profile("receiver")
    @Bean
    public Tut1Receiver receiver() {
       return new Tut1Receiver();
   } 

    @Profile("sender")
    @Bean
    public Tut1Sender sender() {
       return new Tut1Sender();
    }
 }

Tut1Receiver.java:

package org.springframework.amqp.tutorials.tut1;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;

@RabbitListener(queues = "hello")
public class Tut1Receiver {

     @RabbitHandler
     public void receive(String in) {
          System.out.println(" [x] Received '" + in + "'");
     }
}

Tut1Sender.java:

package org.springframework.amqp.tutorials.tut1;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;


public class Tut1Sender {

     @Autowired
     private RabbitTemplate template;

     @Autowired
     private Queue queue;

     @Scheduled(fixedDelay = 1000, initialDelay = 500)
     public void send() {   
         String message = "Hello World!";
         this.template.convertAndSend(queue.getName(), message);
         System.out.println(" [x] Sent '" + message + "'");
    }

}

和配置:

application.yml:

spring:
  profiles:
    active: usage_message

logging:
  level:
    org: ERROR

tutorial:
  client:
    duration: 10000

0 个答案:

没有答案