Skip to content

Commit d4bf5e3

Browse files
committed
Refactor basic example
Add broadcast example Add direct example
1 parent 91f5d54 commit d4bf5e3

21 files changed

+542
-19
lines changed

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,12 @@ http://localhost:15672/
1010

1111
Ready to run in heroku with the CloudAMQP add-on.
1212

13-
TODO
14-
- End readme
13+
TODO end readme
14+
15+
- End readme
16+
17+
basic -> Default exchange
18+
broadcast -> Fanout exchange
19+
direct -> Direct exchange
20+
Topic exchange
21+
Headers exchange

src/main/java/com/devdevx/examples/springbootrabbitmq/RabbitmqApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
@SpringBootApplication
77
public class RabbitmqApplication {
88

9-
public static void main(String[] args) {
10-
SpringApplication.run(RabbitmqApplication.class, args);
11-
}
9+
public static void main(String[] args) {
10+
SpringApplication.run(RabbitmqApplication.class, args);
11+
}
1212
}

src/main/java/com/devdevx/examples/springbootrabbitmq/basic/Runner.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import com.devdevx.examples.springbootrabbitmq.basic.messaging.BasicMessageSender;
44
import org.springframework.boot.CommandLineRunner;
5+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
56
import org.springframework.context.annotation.Profile;
67
import org.springframework.stereotype.Component;
78

89

910
@Profile("producer")
1011
@Component
12+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "basic")
1113
public class Runner implements CommandLineRunner {
1214

15+
// TODO change to schedule
1316
private final BasicMessageSender messageSender;
1417

1518
public Runner(BasicMessageSender messageSender) {

src/main/java/com/devdevx/examples/springbootrabbitmq/basic/config/BasicRmqConfig.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
import org.springframework.amqp.core.FanoutExchange;
88
import org.springframework.amqp.core.Queue;
99
import org.springframework.beans.factory.annotation.Value;
10+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1011
import org.springframework.context.annotation.Bean;
1112
import org.springframework.context.annotation.Configuration;
1213

1314
@Configuration
15+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "basic")
1416
public class BasicRmqConfig {
1517

1618
private static final Logger log = LoggerFactory.getLogger(BasicRmqConfig.class);
@@ -21,9 +23,6 @@ public class BasicRmqConfig {
2123
@Value("${app.rabbitmq.basic.queue}")
2224
private String queueName;
2325

24-
@Value("${app.rabbitmq.basic.routing-key}")
25-
private String routingKey;
26-
2726
@Bean
2827
Queue queue() {
2928
log.info("Creating queue: {}", queueName);
@@ -54,7 +53,7 @@ Binding binding(Queue queue, FanoutExchange exchange) {
5453
@Bean
5554
Binding binding(Queue queue, DirectExchange exchange) {
5655
log.info("Binding queue '{}' to the exchange '{}' with the routing key ''", queueName, exchangeName);
57-
return BindingBuilder.bind(queue).to(exchange).with("*");
56+
return BindingBuilder.bind(queue).to(exchange).with("");
5857
}
5958
*/
6059
}

src/main/java/com/devdevx/examples/springbootrabbitmq/basic/config/BasicRmqProduConfig.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import org.springframework.amqp.rabbit.core.RabbitTemplate;
55
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
66
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
78
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
810
import org.springframework.context.annotation.Profile;
9-
import org.springframework.stereotype.Component;
1011

1112
@Profile("producer")
12-
@Component
13+
@Configuration
14+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "basic")
1315
public class BasicRmqProduConfig {
1416

1517
@Value("${app.rabbitmq.basic.exchange}")

src/main/java/com/devdevx/examples/springbootrabbitmq/basic/messaging/BasicMessageReceiver.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@
33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
55
import org.springframework.amqp.rabbit.annotation.RabbitListener;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
68
import org.springframework.context.annotation.Profile;
79
import org.springframework.stereotype.Component;
810

911
@Profile("consumer")
1012
@Component
13+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "basic")
1114
public class BasicMessageReceiver {
1215

1316
private static final Logger log = LoggerFactory.getLogger(BasicMessageReceiver.class);
1417

18+
@Value("${app.rabbitmq.basic.queue}")
19+
private String queueName;
20+
1521
@RabbitListener(queues = "${app.rabbitmq.basic.queue}")
1622
public void receive(BasicMessage message) {
17-
log.info("Basic message received {}", message);
23+
log.info("Basic message received on queue '{}' : {}", queueName, message);
1824
try {
1925
log.info("Sleeping {}ms", message.getMs());
2026
Thread.sleep(message.getMs());

src/main/java/com/devdevx/examples/springbootrabbitmq/basic/messaging/BasicMessageSender.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
55
import org.springframework.amqp.rabbit.core.RabbitTemplate;
6-
import org.springframework.beans.factory.annotation.Value;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
77
import org.springframework.context.annotation.Profile;
88
import org.springframework.stereotype.Component;
99

@@ -12,14 +12,13 @@
1212

1313
@Profile("producer")
1414
@Component
15+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "basic")
1516
public class BasicMessageSender {
1617

1718
private static final Logger log = LoggerFactory.getLogger(BasicMessageSender.class);
1819

19-
@Value("${app.rabbitmq.basic.routing-key}")
20-
private String routingKey;
21-
2220
private RabbitTemplate rabbitTemplate;
21+
2322
private int id = 0;
2423

2524
public BasicMessageSender(RabbitTemplate rabbitTemplate) {
@@ -28,7 +27,7 @@ public BasicMessageSender(RabbitTemplate rabbitTemplate) {
2827

2928
public void send() {
3029
BasicMessage message = new BasicMessage(id++, LocalDateTime.now().toString(), new Random().nextInt(20) * 1000);
31-
log.info("Sending basic message {}", message);
30+
log.info("Sending basic message: {}", message);
3231
rabbitTemplate.convertAndSend(message);
3332
}
3433
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.devdevx.examples.springbootrabbitmq.broadcast;
2+
3+
import com.devdevx.examples.springbootrabbitmq.broadcast.messaging.BroadcastMessageSender;
4+
import org.springframework.boot.CommandLineRunner;
5+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
6+
import org.springframework.context.annotation.Profile;
7+
import org.springframework.stereotype.Component;
8+
9+
10+
@Profile("producer")
11+
@Component
12+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "broadcast")
13+
public class Runner implements CommandLineRunner {
14+
15+
// TODO change to schedule
16+
private final BroadcastMessageSender messageSender;
17+
18+
public Runner(BroadcastMessageSender messageSender) {
19+
this.messageSender = messageSender;
20+
}
21+
22+
@Override
23+
public void run(String... args) throws Exception {
24+
while (true) {
25+
messageSender.send();
26+
Thread.sleep(10000);
27+
}
28+
}
29+
30+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.devdevx.examples.springbootrabbitmq.broadcast.config;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.amqp.core.Binding;
6+
import org.springframework.amqp.core.BindingBuilder;
7+
import org.springframework.amqp.core.FanoutExchange;
8+
import org.springframework.amqp.core.Queue;
9+
import org.springframework.beans.factory.annotation.Qualifier;
10+
import org.springframework.beans.factory.annotation.Value;
11+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Configuration;
14+
15+
@Configuration
16+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "broadcast")
17+
public class BroadcastRmqConfig {
18+
19+
private static final Logger log = LoggerFactory.getLogger(BroadcastRmqConfig.class);
20+
21+
@Value("${app.rabbitmq.broadcast.exchange}")
22+
private String exchangeName;
23+
24+
@Value("${app.rabbitmq.broadcast.queue-one}")
25+
private String queueNameOne;
26+
27+
@Value("${app.rabbitmq.broadcast.queue-two}")
28+
private String queueNameTwo;
29+
30+
@Value("${app.rabbitmq.broadcast.queue-three}")
31+
private String queueNameThree;
32+
33+
@Bean
34+
Queue queueOne() {
35+
log.info("Creating queue: {}", queueNameOne);
36+
return new Queue(queueNameOne, false);
37+
}
38+
39+
@Bean
40+
Queue queueTwo() {
41+
log.info("Creating queue: {}", queueNameTwo);
42+
return new Queue(queueNameTwo, false);
43+
}
44+
45+
@Bean
46+
Queue queueThree() {
47+
log.info("Creating queue: {}", queueNameThree);
48+
return new Queue(queueNameThree, false);
49+
}
50+
51+
@Bean
52+
FanoutExchange exchange() {
53+
log.info("Creating exchange: {}", exchangeName);
54+
return new FanoutExchange(exchangeName);
55+
}
56+
57+
@Bean
58+
Binding bindingOne(@Qualifier("queueOne") Queue queue, FanoutExchange exchange) {
59+
log.info("Binding queue '{}' to the exchange '{}'", queue.getName(), exchange.getName());
60+
return BindingBuilder.bind(queue).to(exchange);
61+
}
62+
63+
@Bean
64+
Binding bindingTwo(@Qualifier("queueTwo") Queue queue, FanoutExchange exchange) {
65+
log.info("Binding queue '{}' to the exchange '{}'", queue.getName(), exchange.getName());
66+
return BindingBuilder.bind(queue).to(exchange);
67+
}
68+
69+
@Bean
70+
Binding bindingThree(@Qualifier("queueThree") Queue queue, FanoutExchange exchange) {
71+
log.info("Binding queue '{}' to the exchange '{}'", queue.getName(), exchange.getName());
72+
return BindingBuilder.bind(queue).to(exchange);
73+
}
74+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.devdevx.examples.springbootrabbitmq.broadcast.config;
2+
3+
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
4+
import org.springframework.amqp.rabbit.core.RabbitTemplate;
5+
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.context.annotation.Profile;
11+
12+
@Profile("producer")
13+
@Configuration
14+
@ConditionalOnProperty(name = "app.rabbitmq.example", havingValue = "broadcast")
15+
public class BroadcastRmqProduConfig {
16+
17+
@Value("${app.rabbitmq.broadcast.exchange}")
18+
private String exchangeName;
19+
20+
@Bean
21+
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
22+
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
23+
rabbitTemplate.setMessageConverter(converter);
24+
rabbitTemplate.setExchange(exchangeName);
25+
return rabbitTemplate;
26+
}
27+
28+
}

0 commit comments

Comments
 (0)