JaidenAshmore / java-dynamic-sqs-listener

Java SQS Listener library built to be customisable and dynamic during runtime
MIT License
50 stars 12 forks source link

Update Ktor integration to Ktor 2.x #391

Closed tlusk closed 1 year ago

tlusk commented 1 year ago

The Ktor 2.x version made some breaking changes, this updates the ktor-core module to use the new interfaces.

This also bumps up the Kotlin version to a compatible version.

JaidenAshmore commented 1 year ago

Hey, thanks for the MR!

Looks like there is a build failure with the example application:

> Task :example:ktor-example:compileKotlin FAILED
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (10, 16): Unresolved reference: application
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (11, 16): Unresolved reference: application
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (14, 16): Unresolved reference: response
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (15, 16): Unresolved reference: response
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (16, 16): Unresolved reference: routing
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (17, 16): Unresolved reference: routing
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (37, 21): Unresolved reference: log
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (62, 21): Unresolved reference: log
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (75, 21): Unresolved reference: log
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (83, 9): Unresolved reference: routing
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (84, 13): Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public operator fun MatchGroupCollection.get(name: String): MatchGroup? defined in kotlin.text
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (85, 39): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (94, 21): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (100, 19): Suspend function 'await' should be called only from a coroutine or another suspend function
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (102, 17): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (105, 13): Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public operator fun MatchGroupCollection.get(name: String): MatchGroup? defined in kotlin.text
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (106, 39): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (115, 21): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (121, 17): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (124, 13): Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public operator fun MatchGroupCollection.get(name: String): MatchGroup? defined in kotlin.text
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (125, 39): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (134, 21): Unresolved reference: call
e: /home/runner/work/java-dynamic-sqs-listener/java-dynamic-sqs-listener/examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt: (140, 17): Unresolved reference: call

could you give that a look and I can try and get it released afterwards

tlusk commented 1 year ago

Oops I didn't see there was a sample application. On a quick first look it appears it just needed the imports updated.

I gave the sample a run and it looks to be working as expected now:

# Starting up
16-03-2023 14:50:28.155 [main] INFO  c.j.s.e.ElasticMqSqsAsyncClient.<init> - Starting local SQS Server  
16-03-2023 14:50:29.087 [main] INFO  c.j.sqs.util.LocalSqsAsyncClientImpl.<init> - Connecting to local SQS service at http://localhost:45663  
16-03-2023 14:50:29.116 [main] WARN  s.a.a.p.internal.ProfileFileReader.warn - Ignoring profile '[default]' on line 4, because '[profile default]' was already seen in the same file.  
16-03-2023 14:50:29.316 [main] INFO  ktor.application.createClassLoader - Autoreload is disabled because the development mode is off.  
16-03-2023 14:50:29.325 [main] INFO  c.j.sqs.util.LocalSqsAsyncClientImpl.createRandomQueue - Creating queue with name: cd1cca99a4d34f229b2866f711f340e3  
16-03-2023 14:50:29.658 [main] INFO  c.j.sqs.util.LocalSqsAsyncClientImpl.createRandomQueue - Creating queue with name: 886abd9f60a04300a3317c5206e97fe6  
16-03-2023 14:50:29.676 [main] INFO  c.j.sqs.util.LocalSqsAsyncClientImpl.createRandomQueue - Creating queue with name: 9fef5518bdc746c9a2ebbb0a3f3abe7d  
16-03-2023 14:50:29.709 [main] INFO  ktor.application.invoke - Application started in 0.421 seconds.  
16-03-2023 14:50:29.710 [main] INFO  c.j.s.c.CoreMessageListenerContainer.start - Container 'core-listener' is being started  
16-03-2023 14:50:29.711 [main] INFO  c.j.s.c.CoreMessageListenerContainer.start - Container 'prefetching-listener' is being started  
16-03-2023 14:50:29.711 [main] INFO  c.j.s.c.CoreMessageListenerContainer.start - Container 'batching-listener' is being started  
16-03-2023 14:50:29.717 [prefetching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Started MessageResolver background thread  
16-03-2023 14:50:29.717 [core-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Started MessageResolver background thread  
16-03-2023 14:50:29.717 [batching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Started MessageResolver background thread  
16-03-2023 14:50:29.718 [prefetching-listener-message-retriever] INFO  c.j.s.r.p.PrefetchingMessageRetriever.run - Started MessageRetriever  
16-03-2023 14:50:29.718 [core-listener-message-retriever] INFO  c.j.s.r.b.BatchingMessageRetriever.run - Started MessageRetriever  
16-03-2023 14:50:29.718 [batching-listener-message-retriever] INFO  c.j.s.r.b.BatchingMessageRetriever.run - Started MessageRetriever  
16-03-2023 14:50:29.718 [prefetching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'prefetching-listener' is beginning to process messages  
16-03-2023 14:50:29.718 [batching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'batching-listener' is beginning to process messages  
16-03-2023 14:50:29.718 [core-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'core-listener' is beginning to process messages  
16-03-2023 14:50:29.719 [batching-listener-message-broker] INFO  c.j.s.b.c.ConcurrentMessageBroker.updateConcurrencyLevelIfChanged - Changing concurrency from 0 to 2  
16-03-2023 14:50:29.719 [core-listener-message-broker] INFO  c.j.s.b.c.ConcurrentMessageBroker.updateConcurrencyLevelIfChanged - Changing concurrency from 0 to 5  
16-03-2023 14:50:29.719 [prefetching-listener-message-broker] INFO  c.j.s.b.c.ConcurrentMessageBroker.updateConcurrencyLevelIfChanged - Changing concurrency from 0 to 2  
16-03-2023 14:50:29.749 [DefaultDispatcher-worker-1] INFO  ktor.application.invokeSuspend - Responding at http://0.0.0.0:8080  

# Hitting the /message/{queue} endpoint
16-03-2023 14:51:01.915 [core-listener-message-processing-0] INFO  ktor.application.invoke - Message: body  
16-03-2023 14:51:07.679 [prefetching-listener-message-processing-0] INFO  ktor.application.invoke - Message: body  
16-03-2023 14:51:11.782 [batching-listener-message-processing-0] INFO  ktor.application.invoke - Processing message: body  

# Shutting down
16-03-2023 14:51:21.405 [Thread-2] INFO  c.j.s.c.CoreMessageListenerContainer.stop - Container 'core-listener' is being stopped and will wait 60 seconds  
16-03-2023 14:51:21.405 [Thread-4] INFO  c.j.s.c.CoreMessageListenerContainer.stop - Container 'batching-listener' is being stopped and will wait 60 seconds  
16-03-2023 14:51:21.405 [Thread-3] INFO  c.j.s.c.CoreMessageListenerContainer.stop - Container 'prefetching-listener' is being stopped and will wait 60 seconds  
16-03-2023 14:51:21.406 [prefetching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'prefetching-listener' is being shutdown  
16-03-2023 14:51:21.406 [batching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'batching-listener' is being shutdown  
16-03-2023 14:51:21.406 [core-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'core-listener' is being shutdown  
16-03-2023 14:51:21.407 [batching-listener-message-retriever] INFO  c.j.s.r.b.BatchingMessageRetriever.run - MessageRetriever has been successfully stopped  
16-03-2023 14:51:21.407 [core-listener-message-retriever] INFO  c.j.s.r.b.BatchingMessageRetriever.run - MessageRetriever has been successfully stopped  
16-03-2023 14:51:21.408 [core-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Shutting down MessageResolver  
16-03-2023 14:51:21.408 [prefetching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Shutting down MessageResolver  
16-03-2023 14:51:21.408 [core-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - MessageResolver has been successfully stopped  
16-03-2023 14:51:21.408 [batching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - Shutting down MessageResolver  
16-03-2023 14:51:21.408 [prefetching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - MessageResolver has been successfully stopped  
16-03-2023 14:51:21.408 [batching-listener-message-resolver] INFO  c.j.s.r.b.BatchingMessageResolver.run - MessageResolver has been successfully stopped  
16-03-2023 14:51:21.408 [core-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'core-listener' has stopped  
16-03-2023 14:51:21.408 [prefetching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'prefetching-listener' has stopped  
16-03-2023 14:51:21.408 [batching-listener-message-container] INFO  c.j.s.c.CoreMessageListenerContainer.runContainer - Container 'batching-listener' has stopped  

Process finished with exit code 130 (interrupted by signal 2: SIGINT)
JaidenAshmore commented 1 year ago

I released this in 5.1.0