From 67f75c18a6cf0ba28324cebbb507c51b82b7867a Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 9 Jul 2010 15:39:38 -0700 Subject: [PATCH] adding async example to helloworld sample --- .../amqp/helloworld/Consumer.java | 12 ++-- .../amqp/helloworld/Producer.java | 15 ++--- .../amqp/helloworld/RabbitConfiguration.java | 7 +- .../amqp/helloworld/async/Consumer.java | 11 +++ .../{ => async}/ConsumerConfiguration.java | 7 +- .../{ => async}/HelloWorldHandler.java | 3 +- .../amqp/helloworld/async/Producer.java | 11 +++ .../async/ProducerConfiguration.java | 67 +++++++++++++++++++ .../src/main/resources/log4j.properties | 2 +- 9 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 helloworld/src/main/java/org/springframework/amqp/helloworld/async/Consumer.java rename helloworld/src/main/java/org/springframework/amqp/helloworld/{ => async}/ConsumerConfiguration.java (86%) rename helloworld/src/main/java/org/springframework/amqp/helloworld/{ => async}/HelloWorldHandler.java (70%) create mode 100644 helloworld/src/main/java/org/springframework/amqp/helloworld/async/Producer.java create mode 100644 helloworld/src/main/java/org/springframework/amqp/helloworld/async/ProducerConfiguration.java diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/Consumer.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/Consumer.java index 078823b..6994dff 100644 --- a/helloworld/src/main/java/org/springframework/amqp/helloworld/Consumer.java +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/Consumer.java @@ -7,13 +7,9 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext public class Consumer { public static void main(String[] args) { - //ApplicationContext ctx = new AnnotationConfigApplicationContext(ConsumerConfiguration.class); - - - ApplicationContext ctx = new AnnotationConfigApplicationContext(RabbitConfiguration.class); - RabbitTemplate rabbitTemplate = (RabbitTemplate) ctx.getBean(RabbitTemplate.class); - - System.out.println("Received " + rabbitTemplate.receiveAndConvert()); - + ApplicationContext context = new AnnotationConfigApplicationContext(RabbitConfiguration.class); + RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class); + System.out.println("Received: " + rabbitTemplate.receiveAndConvert()); } + } diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/Producer.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/Producer.java index 2068d06..b44cb9f 100644 --- a/helloworld/src/main/java/org/springframework/amqp/helloworld/Producer.java +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/Producer.java @@ -6,16 +6,11 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext public class Producer { - /** - * @param args - */ public static void main(String[] args) { - ApplicationContext ctx = new AnnotationConfigApplicationContext(RabbitConfiguration.class); - - RabbitTemplate rabbitTemplate = (RabbitTemplate) ctx.getBean(RabbitTemplate.class); - rabbitTemplate.convertAndSend("Hello World"); - System.out.println("Sent Hello World."); - + ApplicationContext context = new AnnotationConfigApplicationContext(RabbitConfiguration.class); + RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class); + rabbitTemplate.convertAndSend("Hello World"); + System.out.println("Sent: Hello World"); } - + } diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/RabbitConfiguration.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/RabbitConfiguration.java index 89abccb..4c21464 100644 --- a/helloworld/src/main/java/org/springframework/amqp/helloworld/RabbitConfiguration.java +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/RabbitConfiguration.java @@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration; public class RabbitConfiguration extends AbstractRabbitConfiguration { protected final String helloWorldQueueName = "hello.world.queue"; - + @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); @@ -20,7 +20,7 @@ public class RabbitConfiguration extends AbstractRabbitConfiguration { connectionFactory.setPassword("guest"); return connectionFactory; } - + @Override public RabbitTemplate rabbitTemplate() { RabbitTemplate template = new RabbitTemplate(connectionFactory()); @@ -50,7 +50,6 @@ public class RabbitConfiguration extends AbstractRabbitConfiguration { }*/ /* - public Queue declareUniqueQueue(String namePrefix) { Queue queue = new Queue(namePrefix + "-" + UUID.randomUUID()); rabbitAdminTemplate().declareQueue(queue); @@ -74,6 +73,4 @@ public class RabbitConfiguration extends AbstractRabbitConfiguration { return declare(new Binding(declareUniqueQueue(queuePrefix), exchange, routingKey)); }*/ - - } diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Consumer.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Consumer.java new file mode 100644 index 0000000..6018d53 --- /dev/null +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Consumer.java @@ -0,0 +1,11 @@ +package org.springframework.amqp.helloworld.async; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Consumer { + + public static void main(String[] args) { + new AnnotationConfigApplicationContext(ConsumerConfiguration.class); + } + +} diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/ConsumerConfiguration.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/ConsumerConfiguration.java similarity index 86% rename from helloworld/src/main/java/org/springframework/amqp/helloworld/ConsumerConfiguration.java rename to helloworld/src/main/java/org/springframework/amqp/helloworld/async/ConsumerConfiguration.java index 30e41d4..9d95a25 100644 --- a/helloworld/src/main/java/org/springframework/amqp/helloworld/ConsumerConfiguration.java +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/ConsumerConfiguration.java @@ -1,5 +1,6 @@ -package org.springframework.amqp.helloworld; +package org.springframework.amqp.helloworld.async; +import org.springframework.amqp.helloworld.RabbitConfiguration; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; import org.springframework.context.annotation.Bean; @@ -7,7 +8,7 @@ import org.springframework.context.annotation.Configuration; @Configuration public class ConsumerConfiguration extends RabbitConfiguration { - + @Bean public SimpleMessageListenerContainer listenerContainer() { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); @@ -16,5 +17,5 @@ public class ConsumerConfiguration extends RabbitConfiguration { container.setMessageListener(new MessageListenerAdapter(new HelloWorldHandler())); return container; } - + } diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/HelloWorldHandler.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/HelloWorldHandler.java similarity index 70% rename from helloworld/src/main/java/org/springframework/amqp/helloworld/HelloWorldHandler.java rename to helloworld/src/main/java/org/springframework/amqp/helloworld/async/HelloWorldHandler.java index 8ed9744..529c901 100644 --- a/helloworld/src/main/java/org/springframework/amqp/helloworld/HelloWorldHandler.java +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/HelloWorldHandler.java @@ -1,8 +1,9 @@ -package org.springframework.amqp.helloworld; +package org.springframework.amqp.helloworld.async; public class HelloWorldHandler { public void handleMessage(String text) { System.out.println("Received: " + text); } + } diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Producer.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Producer.java new file mode 100644 index 0000000..3a00dc6 --- /dev/null +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/Producer.java @@ -0,0 +1,11 @@ +package org.springframework.amqp.helloworld.async; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Producer { + + public static void main(String[] args) throws Exception { + new AnnotationConfigApplicationContext(ProducerConfiguration.class); + } + +} diff --git a/helloworld/src/main/java/org/springframework/amqp/helloworld/async/ProducerConfiguration.java b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/ProducerConfiguration.java new file mode 100644 index 0000000..3741f8d --- /dev/null +++ b/helloworld/src/main/java/org/springframework/amqp/helloworld/async/ProducerConfiguration.java @@ -0,0 +1,67 @@ +package org.springframework.amqp.helloworld.async; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.config.AbstractRabbitConfiguration; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor; + +@Configuration +public class ProducerConfiguration extends AbstractRabbitConfiguration { + + protected final String helloWorldQueueName = "hello.world.queue"; + + @Override + public RabbitTemplate rabbitTemplate() { + RabbitTemplate template = new RabbitTemplate(connectionFactory()); + template.setRoutingKey(this.helloWorldQueueName); + template.setQueue(this.helloWorldQueueName); + return template; + } + + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); + connectionFactory.setUsername("guest"); + connectionFactory.setPassword("guest"); + return connectionFactory; + } + + @Bean + public Queue helloWorldQueue() { + return new Queue(this.helloWorldQueueName); + } + + @Bean + public ScheduledProducer scheduledProducer() { + return new ScheduledProducer(); + } + + @Bean + public BeanPostProcessor postProcessor() { + return new ScheduledAnnotationBeanPostProcessor(); + } + + + static class ScheduledProducer { + + @Autowired + private volatile RabbitTemplate rabbitTemplate; + + private final AtomicInteger counter = new AtomicInteger(); + + @Scheduled(fixedRate = 3000) + public void sendMessage() { + rabbitTemplate.convertAndSend("Hello World " + counter.incrementAndGet()); + } + } + +} diff --git a/helloworld/src/main/resources/log4j.properties b/helloworld/src/main/resources/log4j.properties index 9687c70..abbb5c2 100644 --- a/helloworld/src/main/resources/log4j.properties +++ b/helloworld/src/main/resources/log4j.properties @@ -6,6 +6,6 @@ log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n log4j.appender.stdout.layout.ConversionPattern=%-5p [%40.40c{4}]: %m%n -log4j.category.org.springframework.amqp.rabbit=DEBUG +log4j.category.org.springframework.amqp.rabbit=INFO log4j.category.org.springframework.beans.factory=INFO