Kason's cave

queuing

Word count: 733Reading time: 4 min
2025/03/11
loading

Project Name: Microservices-Based Order Processing System with Message Queue

Project Overview

Design and implement a simplified online shopping order processing system using a microservices architecture. The system decouples order, inventory, payment, and notification modules, enabling asynchronous communication between services via a message queue. This enhances system scalability and fault tolerance while providing hands-on experience with message queues in real-world business scenarios.


Main Features & Modules

Order Service

  • Functions:

    • Receive user order requests, validate order data, and store it initially.
      • Validation ensures completeness and correctness:
        1. Order amount cannot be negative.
        2. Product ID must be valid.
        3. Purchase quantity must be a positive integer.
      • Frontend data validation methods:
        1. Use token-based authentication.
        2. Implement signature mechanisms.
        3. Prevent CSRF (Cross-Site Request Forgery).
    • Publish order creation events to the message queue.
  • Key Learning Points:

    • How to encapsulate business events as messages and publish them to a queue.

Inventory Service

  • Functions:

    • Listen for order creation messages and check the inventory.
    • Lock inventory if available, then send confirmation or failure messages.
  • Key Learning Points:

    • How to subscribe to a message queue and process messages.
    • Ensure idempotency (avoid duplicate inventory deductions).

Payment Service

  • Functions:

    • Process order payments after inventory confirmation.
    • After payment completion, notify other services via message queue.
  • Key Learning Points:

    • Implement an asynchronous payment process and simulate a payment gateway with callback handling.

Notification Service

  • Functions:

    • Receive payment results or order status updates and send email/SMS notifications to users.
  • Key Learning Points:

    • Message consumption and reliable message delivery.
    • Handling delayed tasks (e.g., order timeout notifications).

Application of Message Queue Technology

  • Choosing a Message Broker:
    You can use RabbitMQ, Kafka, or Redis Streams for message queue implementation.

    • RabbitMQ: Best for understanding traditional messaging patterns, message acknowledgments, and routing.
    • Kafka: Suitable for high-throughput use cases, involving distributed logs and consumer groups.
    • Redis Streams: Provides real-time event streaming while leveraging Redis as an in-memory data store.
  • Core Concepts:

    • Publish/Subscribe Model: Each service subscribes to messages relevant to its functionality.
    • Message Acknowledgment & Retry: Ensure reliable message processing with retries and dead-letter queues.
    • Idempotency Handling: Prevent duplicate processing errors (e.g., avoiding double inventory deduction).

Project Development Steps

  1. Requirement Design & Technology Selection

    • Define service responsibilities and API design.

    • Select a message broker (e.g., RabbitMQ) and set up the development environment, possibly using Docker.

  2. Microservices Development & REST API Implementation

    • Develop APIs for order, inventory, payment, and notification services.
    • Create a simple frontend or use Postman to simulate user actions.
  3. Integrating Message Queue

    • The order service publishes order creation events.
    • Other services (inventory, payment, notification) subscribe to relevant queues and process messages.
  4. Enhancing Fault Tolerance with Error Handling & Retry Mechanisms

    • Implement message acknowledgment and dead-letter queues for handling failed messages.
    • Add automatic retry mechanisms for message processing failures.
  5. Testing & Debugging

    • Conduct unit testing for individual services and integration testing for end-to-end functionality.
    • Simulate business exceptions (e.g., out-of-stock, payment failures) to validate system robustness.
  6. Documentation & Summary

    • Write project documentation covering service interactions and message queue usage.
    • Reflect on system optimization opportunities.

Key Learning Outcomes

  • Understanding Asynchronous Architectures: Learn how to decouple systems for better scalability and fault tolerance.
  • Familiarity with Message Queues: Master the concepts of publishing, subscribing, acknowledgment, retries, and dead-letter handling.
  • Practical Experience in Microservices Design: Gain hands-on knowledge of service communication and coordination.
  • Real-World Implementation Skills: Apply message queues in business scenarios to optimize system performance.

1. Choosing a Framework

  • Laravel/Lumen

    • Laravel has a built-in queue system supporting Redis, RabbitMQ, and other message brokers.

    • Lumen (a lightweight version of Laravel) is a good choice for microservices.

Laravel’s queue system simplifies asynchronous task processing for order creation, inventory checks, and payment handling.

  • Symfony

    • Symfony offers robust components, and you can integrate enqueue to support RabbitMQ, Kafka, and other message queues.

2. Message Queue Integration

  • Using Laravel Queue System

    • Laravel’s queue system supports Redis, Beanstalkd, Amazon SQS, and more.
    • Use Artisan commands to create and manage queue jobs.
  • PHP Message Queue Libraries

    • Use php-amqplib to interact with RabbitMQ directly.
    • Use Redis PHP extensions for Redis Streams-based messaging.

3. Key Considerations for Microservices Architecture

  • Service Decoupling:

    • Message queues reduce direct dependencies between services.
    • Implement independent microservices for order, inventory, payment, and notification processing.
  • Asynchronous Task Handling:

    • PHP is not inherently asynchronous, but queues enable background processing.
    • Consider using Swoole for enhanced concurrency in PHP applications.
CATALOG
  1. 1. Project Name: Microservices-Based Order Processing System with Message Queue
    1. 1.1. Project Overview
    2. 1.2. Main Features & Modules
    3. 1.3. Application of Message Queue Technology
    4. 1.4. Project Development Steps
    5. 1.5. Key Learning Outcomes
    6. 1.6. 1. Choosing a Framework
    7. 1.7. 2. Message Queue Integration
    8. 1.8. 3. Key Considerations for Microservices Architecture