|
| 1 | +# SQS Listener Library Comparison |
| 2 | +This module has the Spring Cloud, JMS and Java Dynamic SQS Listener libraries all integrated into a Spring Boot application. This can be used |
| 3 | +to compare the performance of each of the types of libraries with different types of messages being processed. For example, a message that has a lot of |
| 4 | +IO or to test what happens if the time to get new messages from the queue is large. |
| 5 | + |
| 6 | +## Getting Started |
| 7 | +You can run the [Application](src/main/java/com/jashmore/sqs/examples/Application.java) which will place messages onto a queue and then the corresponding |
| 8 | +listener will process them. Take a look at the [ExampleConstants](src/main/java/com/jashmore/sqs/examples/ExampleConstants.java) for the types of variables |
| 9 | +that can be altered, such as the time to process the messages, etc. |
| 10 | + |
| 11 | +## Results (02/June/2019) |
| 12 | +The results that I ran on my local machine (which is not the greatest environment but gives a rough estimate) are the following: |
| 13 | + |
| 14 | +### tl;dr |
| 15 | +*Ordered from fastest to slowest* |
| 16 | + |
| 17 | +| Method | Concurrency | Time 1000 messages (ms) | |
| 18 | +| JMS | 30 | 4889 | |
| 19 | +| Java Dynamic SQS Listener (PrefetchingQueueListener) | 30 | 10550 | |
| 20 | +| Java Dynamic SQS Listener (PrefetchingQueueListener) | 10 | 10560ms | |
| 21 | +| JMS | 10 | 10587 | |
| 22 | +| Spring Cloud | 10 | 20284 | |
| 23 | +| Java Dynamic SQS Listener (QueueListener) | 30 | 20385 | |
| 24 | +| Java Dynamic SQS Listener (QueueListener) | 10 | 20399 | |
| 25 | + |
| 26 | +### Configuration |
| 27 | +- Message latency = 100ms |
| 28 | +- Message IO time = 100ms |
| 29 | +- Commit ID = `a1bdde0d3c96d71997c3001cecc3ddba0d98c709` |
| 30 | + |
| 31 | +### Raw Results |
| 32 | +#### JMS (concurrency = 10) |
| 33 | +``` |
| 34 | +23:44:54.720 [DefaultMessageListenerContainer-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 1454ms |
| 35 | +23:44:55.738 [DefaultMessageListenerContainer-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 2472ms |
| 36 | +23:44:56.754 [DefaultMessageListenerContainer-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 3488ms |
| 37 | +23:44:57.765 [DefaultMessageListenerContainer-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 4499ms |
| 38 | +23:44:58.779 [DefaultMessageListenerContainer-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 5513ms |
| 39 | +23:44:59.788 [DefaultMessageListenerContainer-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 6522ms |
| 40 | +23:45:00.798 [DefaultMessageListenerContainer-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 7532ms |
| 41 | +23:45:01.812 [DefaultMessageListenerContainer-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 8546ms |
| 42 | +23:45:02.834 [DefaultMessageListenerContainer-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 9568ms |
| 43 | +23:45:03.853 [DefaultMessageListenerContainer-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 10587ms |
| 44 | +``` |
| 45 | + |
| 46 | +#### JMS (concurrency = 30) |
| 47 | +``` |
| 48 | +23:45:56.165 [DefaultMessageListenerContainer-9] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 1388ms |
| 49 | +23:45:56.779 [DefaultMessageListenerContainer-10] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 2002ms |
| 50 | +23:45:57.239 [DefaultMessageListenerContainer-1] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 2462ms |
| 51 | +23:45:57.637 [DefaultMessageListenerContainer-3] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 2860ms |
| 52 | +23:45:57.972 [DefaultMessageListenerContainer-28] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 3195ms |
| 53 | +23:45:58.317 [DefaultMessageListenerContainer-15] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 3540ms |
| 54 | +23:45:58.652 [DefaultMessageListenerContainer-22] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 3875ms |
| 55 | +23:45:58.978 [DefaultMessageListenerContainer-28] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 4201ms |
| 56 | +23:45:59.331 [DefaultMessageListenerContainer-12] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 4554ms |
| 57 | +23:45:59.666 [DefaultMessageListenerContainer-21] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 4889ms |
| 58 | +``` |
| 59 | + |
| 60 | +#### Spring Cloud (concurrency = 10, this is the max) |
| 61 | +``` |
| 62 | +23:48:11.143 [simpleMessageListenerContainer-11] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 1860ms |
| 63 | +23:48:13.201 [simpleMessageListenerContainer-10] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 3918ms |
| 64 | +23:48:15.265 [simpleMessageListenerContainer-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 5982ms |
| 65 | +23:48:17.316 [simpleMessageListenerContainer-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 8033ms |
| 66 | +23:48:19.363 [simpleMessageListenerContainer-10] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 10080ms |
| 67 | +23:48:21.408 [simpleMessageListenerContainer-3] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 12125ms |
| 68 | +23:48:23.452 [simpleMessageListenerContainer-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 14169ms |
| 69 | +23:48:25.491 [simpleMessageListenerContainer-10] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 16208ms |
| 70 | +23:48:27.530 [simpleMessageListenerContainer-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 18247ms |
| 71 | +23:48:29.567 [simpleMessageListenerContainer-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 20284ms |
| 72 | +``` |
| 73 | + |
| 74 | +#### Jashmore Prefetching (concurrency = 10) |
| 75 | +``` |
| 76 | +23:39:25.302 [message-listeners-prefetching-concurrency10-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 989ms |
| 77 | +23:39:26.378 [message-listeners-prefetching-concurrency10-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 2065ms |
| 78 | +23:39:27.446 [message-listeners-prefetching-concurrency10-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 3133ms |
| 79 | +23:39:28.517 [message-listeners-prefetching-concurrency10-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 4204ms |
| 80 | +23:39:29.592 [message-listeners-prefetching-concurrency10-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 5279ms |
| 81 | +23:39:30.652 [message-listeners-prefetching-concurrency10-0] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 6339ms |
| 82 | +23:39:31.712 [message-listeners-prefetching-concurrency10-7] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 7399ms |
| 83 | +23:39:32.769 [message-listeners-prefetching-concurrency10-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 8456ms |
| 84 | +23:39:33.821 [message-listeners-prefetching-concurrency10-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 9508ms |
| 85 | +23:39:34.873 [message-listeners-prefetching-concurrency10-7] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 10560ms |
| 86 | +``` |
| 87 | + |
| 88 | +#### Jashmore Prefetching (concurrency = 30) |
| 89 | +``` |
| 90 | +23:38:28.696 [message-listeners-prefetching-concurrency30-12] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 972ms |
| 91 | +23:38:29.772 [message-listeners-prefetching-concurrency30-16] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 2048ms |
| 92 | +23:38:30.847 [message-listeners-prefetching-concurrency30-15] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 3123ms |
| 93 | +23:38:31.926 [message-listeners-prefetching-concurrency30-13] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 4202ms |
| 94 | +23:38:32.990 [message-listeners-prefetching-concurrency30-17] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 5266ms |
| 95 | +23:38:34.056 [message-listeners-prefetching-concurrency30-17] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 6332ms |
| 96 | +23:38:35.119 [message-listeners-prefetching-concurrency30-16] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 7395ms |
| 97 | +23:38:36.174 [message-listeners-prefetching-concurrency30-12] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 8450ms |
| 98 | +23:38:37.225 [message-listeners-prefetching-concurrency30-16] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 9501ms |
| 99 | +23:38:38.274 [message-listeners-prefetching-concurrency30-14] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 10550ms |
| 100 | +``` |
| 101 | + |
| 102 | +#### Jashmore QueueListener (concurrency = 10) |
| 103 | +``` |
| 104 | +23:40:36.464 [message-listeners-queue-listener-method-concurrency10-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 1889ms |
| 105 | +23:40:38.536 [message-listeners-queue-listener-method-concurrency10-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 3961ms |
| 106 | +23:40:40.597 [message-listeners-queue-listener-method-concurrency10-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 6022ms |
| 107 | +23:40:42.658 [message-listeners-queue-listener-method-concurrency10-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 8083ms |
| 108 | +23:40:44.725 [message-listeners-queue-listener-method-concurrency10-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 10150ms |
| 109 | +23:40:46.778 [message-listeners-queue-listener-method-concurrency10-9] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 12203ms |
| 110 | +23:40:48.830 [message-listeners-queue-listener-method-concurrency10-1] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 14255ms |
| 111 | +23:40:50.879 [message-listeners-queue-listener-method-concurrency10-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 16304ms |
| 112 | +23:40:52.928 [message-listeners-queue-listener-method-concurrency10-1] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 18353ms |
| 113 | +23:40:54.974 [message-listeners-queue-listener-method-concurrency10-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 20399ms |
| 114 | +``` |
| 115 | + |
| 116 | +#### Jashmore QueueListener (concurrency = 30) |
| 117 | +``` |
| 118 | +23:41:39.507 [message-listeners-queue-listener-method-concurrency30-7] INFO c.j.sqs.examples.MessageListeners - Time for processing 100 messages is 1875ms |
| 119 | +23:41:41.578 [message-listeners-queue-listener-method-concurrency30-4] INFO c.j.sqs.examples.MessageListeners - Time for processing 200 messages is 3946ms |
| 120 | +23:41:43.639 [message-listeners-queue-listener-method-concurrency30-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 300 messages is 6007ms |
| 121 | +23:41:45.705 [message-listeners-queue-listener-method-concurrency30-7] INFO c.j.sqs.examples.MessageListeners - Time for processing 400 messages is 8073ms |
| 122 | +23:41:47.768 [message-listeners-queue-listener-method-concurrency30-7] INFO c.j.sqs.examples.MessageListeners - Time for processing 500 messages is 10136ms |
| 123 | +23:41:49.823 [message-listeners-queue-listener-method-concurrency30-6] INFO c.j.sqs.examples.MessageListeners - Time for processing 600 messages is 12191ms |
| 124 | +23:41:51.874 [message-listeners-queue-listener-method-concurrency30-1] INFO c.j.sqs.examples.MessageListeners - Time for processing 700 messages is 14242ms |
| 125 | +23:41:53.923 [message-listeners-queue-listener-method-concurrency30-5] INFO c.j.sqs.examples.MessageListeners - Time for processing 800 messages is 16291ms |
| 126 | +23:41:55.971 [message-listeners-queue-listener-method-concurrency30-8] INFO c.j.sqs.examples.MessageListeners - Time for processing 900 messages is 18339ms |
| 127 | +23:41:58.017 [message-listeners-queue-listener-method-concurrency30-2] INFO c.j.sqs.examples.MessageListeners - Time for processing 1000 messages is 20385ms |
| 128 | +``` |
0 commit comments