WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

Design Patterns Β· Advanced Β· question 55 of 100

Discuss the role of the Mediator pattern in implementing communication between microservices in an event-driven architecture.?

πŸ“• Buy this interview preparation book: 100 Design Patterns questions & answers β€” PDF + EPUB for $5

In an event-driven architecture, microservices communicate with each other asynchronously by publishing and subscribing to events. Mediator pattern plays an important role in implementing communication between microservices in an event-driven architecture by providing a central point of communication and decoupling the microservices from each other.

The Mediator pattern promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. A mediator is a behavioral design pattern that lets you reduce chaotic dependencies between objects. The pattern restricts direct communications between the objects and forces them to collaborate only via a mediator object. This way, the objects can maintain their independence from each other while still exchange data.

In the context of microservices communication, the Mediator pattern can be implemented by introducing a Message Broker. A message broker is an intermediary service that acts as a communication channel for different microservices. A message broker receives messages from producers and routes them to the appropriate consumers. This way, the producers do not need to know about the consumers and vice versa, and they communicate with each other indirectly through the message broker.

The following Java code example demonstrates a simple Mediator pattern implementation using Spring Boot and RabbitMQ as the message broker:

// Producer Microservice
@RestController
public class ProducerController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @PostMapping("/event")
    public void sendMessage(@RequestBody Event event) {
        rabbitTemplate.convertAndSend("events.exchange", "events.key", event);
    }
}

// Consumer Microservice
@Component
public class Consumer {

    @RabbitListener(queues = "events.queue")
    public void receiveMessage(Event event) {
        // process the event
    }
}

// RabbitMQ Configuration
@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue queue() {
        return new Queue("events.queue", false);
    }

    @Bean
    public TopicExchange exchange() {
        return new TopicExchange("events.exchange");
    }

    @Bean
    public Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("events.key");
    }

    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(messageConverter());
        return rabbitTemplate;
    }
}

In the above code example, the Producer microservice uses RabbitTemplate to publish an event to the "events.exchange" with routing key "events.key". The Consumer microservice listens to the "events.queue" and processes the event once it arrives. The connection between the two microservices is established through RabbitMQ acting as a mediator by receiving messages from the Producer and routing them to the appropriate Consumer.

In conclusion, the Mediator pattern plays a crucial role in implementing communication between microservices in an event-driven architecture by providing a central communication point and decoupling the microservices from each other. By introducing a Message Broker as a mediator, each microservice can communicate with others indirectly and maintain independence while exchanging data.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Design Patterns interview β€” then scores it.
πŸ“ž Practice Design Patterns β€” free 15 min
πŸ“• Buy this interview preparation book: 100 Design Patterns questions & answers β€” PDF + EPUB for $5

All 100 Design Patterns questions Β· All topics