A simple Java-based message queue implementation with file storage.
- Thread-safe message queue using
BlockingQueue - Unique message IDs - automatically generated UUIDs for each message
- File-based storage - messages survive application restarts
- Producer/Consumer pattern - separate classes for producing and consuming messages
Represents a message with:
- Unique ID (UUID)
- String payload
- Two constructors:
Message(String payload)- creates new message with generated IDMessage(String id, String payload)- loads existing message with preserved ID
The main messages queue implementation with:
enqueue(Message message)- adds message to queue and saves to filedequeue()- removes and returns message from queuesize()- returns current queue size- Automatic file loading on startup
- Saves messages to a specified file
Handles message production with:
produce(String payload)- creates and enqueues a new message- Wraps the message creation and enqueuing process
Handles message consumption with:
poll()- retrieves and returns the next message from the queue- Wraps the message dequeuing process
Demo application showing producer/consumer usage pattern
// Create a message queue with file storage
MessageQueue queue = new MessageQueue("messages.log");
// Create producer and consumer
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
// Produce messages
producer.produce("Hello, World!");
producer.produce("Second message");
// Consume messages
Message delivered = consumer.poll();
System.out.println("Delivered: " + delivered);
// Check queue size
int size = queue.size();This is a Maven project. To build and run:
# Compile
mvn compile
# Run the demo
mvn exec:java -Dexec.mainClass="com.ofek.queue.App"
# Run tests
mvn testMessages are stored in pipe-delimited format:
UUID|payload
another-uuid|another message
- Java 21
- Maven 3.x