miniature-queue
is a Message Queue abstraction layer inspired by feign and JDBI. It uses annotation based meta-programming to bind an interface to an Message Queue implementation.
@Queue("chat", queueTypeHint=QueueType.FANOUT_QUEUE)
interface Chat {
@Publish
void publishMessage(String message);
@Handle
void receiveMessage(Function<String, Boolean> action);
}
MessageQueue queue = Queuify.builder().server(createServerObject()).target(MessageQueue.class);
// Set up a listener for new messages.
queue.receiveMessage((x) -> { System.out.println(x); return true; } );
// Sends hello down the line
queue.publishMessage("Hello");
In a worker queue each message is sent to only one listener. The message publisher sends a fire-and-forget message out to the queue for the work to be done.
In a fanout queue each message is sent to every listener. The message publisher sends a fire-and-forget message out to the queue for the listners to be informed.
- Rabbit MQ via
minature-queue-rabbitmq
package. - Redis via the
miniature-queue-jedis
package. Note: This only supports FAN_OUT queues.
- Java serialization (in core)
- UTF-8 Strings (in core)
- JSON via GSON via
miniature-queue-gson
package. - JSON via Jackson via the
miniature-queue-jackson
package.