Skip to content

Commit 4c47a1e

Browse files
committed
rabbitmq config
1 parent ee489a2 commit 4c47a1e

File tree

4 files changed

+119
-1
lines changed

4 files changed

+119
-1
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mayank.order_service;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
import org.springframework.stereotype.Component;
5+
6+
@ConfigurationProperties(prefix = "orders")
7+
public record ApplicationProperties(
8+
String catalogServiceUrl,
9+
String orderEventsExchange,
10+
String newOrdersQueue,
11+
String deliveredOrdersQueue,
12+
String cancelledOrdersQueue,
13+
String errorOrdersQueue) {}

order-service/src/main/java/com/mayank/order_service/OrderServiceApplication.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
6+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
57

68
@SpringBootApplication
9+
@ConfigurationPropertiesScan
10+
@EnableConfigurationProperties(ApplicationProperties.class)
711
public class OrderServiceApplication {
812

913
public static void main(String[] args) {
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.mayank.order_service.config;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.mayank.order_service.ApplicationProperties;
5+
import org.springframework.amqp.core.Binding;
6+
import org.springframework.amqp.core.BindingBuilder;
7+
import org.springframework.amqp.core.DirectExchange;
8+
import org.springframework.amqp.core.Queue;
9+
import org.springframework.amqp.core.QueueBuilder;
10+
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
11+
import org.springframework.amqp.rabbit.core.RabbitAdmin;
12+
import org.springframework.amqp.rabbit.core.RabbitTemplate;
13+
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
14+
import org.springframework.boot.ApplicationRunner;
15+
import org.springframework.context.annotation.Bean;
16+
import org.springframework.context.annotation.Configuration;
17+
18+
@Configuration
19+
class RabbitMQConfig {
20+
private final ApplicationProperties properties;
21+
22+
RabbitMQConfig(ApplicationProperties properties) {
23+
this.properties = properties;
24+
}
25+
26+
@Bean
27+
DirectExchange exchange() {
28+
return new DirectExchange(properties.orderEventsExchange());
29+
}
30+
31+
@Bean
32+
Queue newOrdersQueue() {
33+
return QueueBuilder.durable(properties.newOrdersQueue()).build();
34+
}
35+
36+
@Bean
37+
Binding newOrdersQueueBinding() {
38+
return BindingBuilder.bind(newOrdersQueue()).to(exchange()).with(properties.newOrdersQueue());
39+
}
40+
41+
@Bean
42+
Queue deliveredOrdersQueue() {
43+
return QueueBuilder.durable(properties.deliveredOrdersQueue()).build();
44+
}
45+
46+
@Bean
47+
Binding deliveredOrdersQueueBinding() {
48+
return BindingBuilder.bind(deliveredOrdersQueue()).to(exchange()).with(properties.deliveredOrdersQueue());
49+
}
50+
51+
@Bean
52+
Queue cancelledOrdersQueue() {
53+
return QueueBuilder.durable(properties.cancelledOrdersQueue()).build();
54+
}
55+
56+
@Bean
57+
Binding cancelledOrdersQueueBinding() {
58+
return BindingBuilder.bind(cancelledOrdersQueue()).to(exchange()).with(properties.cancelledOrdersQueue());
59+
}
60+
61+
@Bean
62+
Queue errorOrdersQueue() {
63+
return QueueBuilder.durable(properties.errorOrdersQueue()).build();
64+
}
65+
66+
@Bean
67+
Binding errorOrdersQueueBinding() {
68+
return BindingBuilder.bind(errorOrdersQueue()).to(exchange()).with(properties.errorOrdersQueue());
69+
}
70+
71+
@Bean
72+
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, JacksonJsonMessageConverter converter) {
73+
final var rabbitTemplate = new RabbitTemplate(connectionFactory);
74+
rabbitTemplate.setMessageConverter(converter);
75+
return rabbitTemplate;
76+
}
77+
78+
@Bean
79+
public JacksonJsonMessageConverter jacksonConverter() {
80+
return new JacksonJsonMessageConverter();
81+
}
82+
@Bean
83+
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
84+
RabbitAdmin admin = new RabbitAdmin(connectionFactory);
85+
admin.setAutoStartup(true);
86+
return admin;
87+
}
88+
@Bean
89+
ApplicationRunner rabbitInitializer(RabbitAdmin rabbitAdmin) {
90+
return args -> rabbitAdmin.initialize();
91+
}
92+
93+
94+
}

order-service/src/main/resources/application.properties

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ management.endpoints.web.exposure.include=*
55
management.info.git.mode=full
66

77
######## Order Service Config ########
8+
orders.catalog-service-url=http://localhost:8081
9+
orders.order-events-exchange=orders-exchange
10+
orders.new-orders-queue=new-orders
11+
orders.delivered-orders-queue=delivered-orders
12+
orders.cancelled-orders-queue=cancelled-orders
13+
orders.error-orders-queue=error-orders
814

915
###### Db Config ######
1016
spring.datasource.url=${DB_URL:jdbc:postgresql://localhost:25432/postgres}
@@ -16,4 +22,5 @@ spring.jpa.open-in-view=false
1622
spring.rabbitmq.host=${RABBITMQ_HOST:localhost}
1723
spring.rabbitmq.port=${RABBITMQ_PORT:5672}
1824
spring.rabbitmq.username=${RABBITMQ_USERNAME:guest}
19-
spring.rabbitmq.password=${RABBITMQ_PASSWORD:guest}
25+
spring.rabbitmq.password=${RABBITMQ_PASSWORD:guest}
26+
spring.rabbitmq.dynamic=true

0 commit comments

Comments
 (0)