From ddbda4bbef7c2d56317b1be0ee69f435e1fa4328 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Fri, 13 Sep 2024 19:55:37 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20feat(=E6=96=B0=E5=A2=9E):=20module?= =?UTF-8?q?=E8=BD=AC=E6=88=90kotlin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionHandler.kt | 16 ++++-- .../minio/properties/MinioProperties.kt | 32 ++++++------ .../module/rabbitMQ/config/RabbitMqConfig.kt | 52 ++++++++++--------- .../module/rabbitMQ/consumer/DelayConsumer.kt | 9 ++-- .../rabbitMQ/consumer/DirectConsumer.kt | 23 ++++---- .../module/rabbitMQ/consumer/ErrorConsumer.kt | 9 ++-- .../rabbitMQ/consumer/FanoutConsumer.kt | 9 ++-- .../module/rabbitMQ/consumer/LazyConsumer.kt | 9 ++-- .../module/rabbitMQ/consumer/TopicConsumer.kt | 9 ++-- .../module/rabbitMQ/listener/DelayListener.kt | 9 ++-- .../rabbitMQ/listener/DirectListener.kt | 43 +++++++++------ .../module/rabbitMQ/listener/ErrorListener.kt | 9 ++-- .../rabbitMQ/listener/FanoutListener.kt | 9 ++-- .../module/rabbitMQ/listener/LazyListener.kt | 9 ++-- .../module/rabbitMQ/listener/TopicListener.kt | 9 ++-- pom.xml | 5 ++ services/pom.xml | 52 +++++++++++++++---- 17 files changed, 181 insertions(+), 132 deletions(-) diff --git a/common/common-service/src/main/kotlin/cn/bunny/common/service/exception/GlobalExceptionHandler.kt b/common/common-service/src/main/kotlin/cn/bunny/common/service/exception/GlobalExceptionHandler.kt index b3d65d5..2b4b314 100644 --- a/common/common-service/src/main/kotlin/cn/bunny/common/service/exception/GlobalExceptionHandler.kt +++ b/common/common-service/src/main/kotlin/cn/bunny/common/service/exception/GlobalExceptionHandler.kt @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice import java.io.FileNotFoundException import java.nio.file.AccessDeniedException import java.sql.SQLIntegrityConstraintViolationException +import java.util.regex.Pattern @RestControllerAdvice @@ -31,9 +32,7 @@ class GlobalExceptionHandler { // 运行时异常信息 @ExceptionHandler(RuntimeException::class) @ResponseBody - @Throws( - FileNotFoundException::class - ) + @Throws(FileNotFoundException::class) fun exceptionHandler(exception: RuntimeException): Result { logger.error("GlobalExceptionHandler===>运行时异常信息:{}", exception.message) exception.printStackTrace() @@ -46,7 +45,16 @@ class GlobalExceptionHandler { fun error(exception: Exception): Result { logger.error("GlobalExceptionHandler===>系统异常信息:{}", exception.message) - return Result.error(null, 500, "系统异常") + // 错误消息 + val message = exception.message ?: "" + // 匹配到内容 + val patternString = "Request method '(\\w+)' is not supported" + val matcher = Pattern.compile(patternString).matcher(message) + + return when { + matcher.find() -> Result.error(null, 500, "请求方法错误,不是 " + matcher.group(1)) + else -> Result.error(null, 500, "系统异常") + } } // 特定异常处理 diff --git a/module/module-minio/src/main/kotlin/cn/bunny/module/minio/properties/MinioProperties.kt b/module/module-minio/src/main/kotlin/cn/bunny/module/minio/properties/MinioProperties.kt index f7e8f02..f08e8a8 100644 --- a/module/module-minio/src/main/kotlin/cn/bunny/module/minio/properties/MinioProperties.kt +++ b/module/module-minio/src/main/kotlin/cn/bunny/module/minio/properties/MinioProperties.kt @@ -1,26 +1,26 @@ -package cn.bunny.module.minio.properties; +package cn.bunny.module.minio.properties -import io.minio.MinioClient; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; +import io.minio.MinioClient +import lombok.Data +import lombok.extern.slf4j.Slf4j +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration @Configuration @ConfigurationProperties(prefix = "bunny.minio") -@ConditionalOnProperty(name = "bunny.minio.bucket-name")// 当属性有值时这个配置才生效 +@ConditionalOnProperty(name = ["bunny.minio.bucket-name"]) // 当属性有值时这个配置才生效 @Data @Slf4j -public class MinioProperties { - private String endpointUrl; - private String accessKey; - private String secretKey; - private String bucketName; +open class MinioProperties { + val endpointUrl: String? = null + val accessKey: String? = null + val secretKey: String? = null + val bucketName: String? = null @Bean - public MinioClient minioClient() { - return MinioClient.builder().endpoint(endpointUrl).credentials(accessKey, secretKey).build(); + open fun minioClient(): MinioClient { + return MinioClient.builder().endpoint(endpointUrl).credentials(accessKey, secretKey).build() } } diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/config/RabbitMqConfig.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/config/RabbitMqConfig.kt index 99abbc7..21eb12a 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/config/RabbitMqConfig.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/config/RabbitMqConfig.kt @@ -1,38 +1,40 @@ -package cn.bunny.module.rabbitMQ.config; +package cn.bunny.module.rabbitMQ.config -import jakarta.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; -import org.springframework.amqp.support.converter.MessageConverter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; +import jakarta.annotation.PostConstruct +import org.apache.logging.log4j.LogManager +import org.springframework.amqp.core.ReturnedMessage +import org.springframework.amqp.rabbit.core.RabbitTemplate +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter +import org.springframework.amqp.support.converter.MessageConverter +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.context.annotation.Bean +import org.springframework.stereotype.Component @Component -@Slf4j -public class RabbitMqConfig { +class RabbitMqConfig { + private val logger = LogManager.getLogger(RabbitMqConfig::class.java) + @Autowired - private RabbitTemplate rabbitTemplate; + private val rabbitTemplate: RabbitTemplate? = null @PostConstruct - public void init() { - rabbitTemplate.setReturnsCallback(returned -> { - log.error("触发return callback,"); - log.debug("exchange: {}", returned.getExchange()); - log.debug("routingKey: {}", returned.getRoutingKey()); - log.debug("message: {}", returned.getMessage()); - log.debug("replyCode: {}", returned.getReplyCode()); - log.debug("replyText: {}", returned.getReplyText()); - }); + fun init() { + rabbitTemplate!!.setReturnsCallback { returned: ReturnedMessage -> + logger.error("触发return callback,") + logger.debug("exchange: {}", returned.exchange) + logger.debug("routingKey: {}", returned.routingKey) + logger.debug("message: {}", returned.message) + logger.debug("replyCode: {}", returned.replyCode) + logger.debug("replyText: {}", returned.replyText) + } } @Bean - public MessageConverter messageConverter() { + fun messageConverter(): MessageConverter { // 1.定义消息转换器 - Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter(); + val converter = Jackson2JsonMessageConverter() // 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息 - converter.setCreateMessageIds(true); - return converter; + converter.setCreateMessageIds(true) + return converter } } diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DelayConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DelayConsumer.kt index ac1874d..6845c41 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DelayConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DelayConsumer.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class DelayConsumer { -} +class DelayConsumer diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DirectConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DirectConsumer.kt index 6b3bc85..040b03a 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DirectConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/DirectConsumer.kt @@ -1,24 +1,25 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.junit.jupiter.api.Test +import org.springframework.amqp.rabbit.core.RabbitTemplate +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Component @Component @Slf4j -public class DirectConsumer { +class DirectConsumer { @Autowired - RabbitTemplate rabbitTemplate; + var rabbitTemplate: RabbitTemplate? = null /** * 发送红色消息 */ @Test - void testSendDirectRed() throws Exception { - for (int i = 0; i < 1000; i++) { - rabbitTemplate.convertAndSend("bunny.direct", "red", "发送消息:" + i); + @Throws(Exception::class) + fun testSendDirectRed() { + for (i in 0..999) { + rabbitTemplate!!.convertAndSend("bunny.direct", "red", "发送消息:$i") } } } diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/ErrorConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/ErrorConsumer.kt index 583823e..ff44266 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/ErrorConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/ErrorConsumer.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class ErrorConsumer { -} +class ErrorConsumer diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/FanoutConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/FanoutConsumer.kt index 0f65252..baf09c4 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/FanoutConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/FanoutConsumer.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class FanoutConsumer { -} +class FanoutConsumer diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/LazyConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/LazyConsumer.kt index 30b451f..ca8b69b 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/LazyConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/LazyConsumer.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class LazyConsumer { -} +class LazyConsumer diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/TopicConsumer.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/TopicConsumer.kt index d6a8de0..d5c83c6 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/TopicConsumer.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/consumer/TopicConsumer.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.consumer; +package cn.bunny.module.rabbitMQ.consumer -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class TopicConsumer { -} +internal class TopicConsumer diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DelayListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DelayListener.kt index 318cd63..153b13d 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DelayListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DelayListener.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class DelayListener { -} +class DelayListener diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DirectListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DirectListener.kt index aa83490..c4c265b 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DirectListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/DirectListener.kt @@ -1,16 +1,16 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.amqp.core.ExchangeTypes +import org.springframework.amqp.rabbit.annotation.Exchange +import org.springframework.amqp.rabbit.annotation.Queue +import org.springframework.amqp.rabbit.annotation.QueueBinding +import org.springframework.amqp.rabbit.annotation.RabbitListener +import org.springframework.stereotype.Component @Component @Slf4j -public class DirectListener { +class DirectListener { /** * * 监听者2 * 创建队列 持久化的、不自动删除 @@ -19,12 +19,23 @@ public class DirectListener { * * @param message 接受消息 */ - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = "direct.queue2", durable = "true", autoDelete = "false"), - exchange = @Exchange(name = "bunny.direct", type = ExchangeTypes.DIRECT, durable = "true", autoDelete = "false"), - key = {"red", "yellow"} - )) - public void listenDirectQueue2(String message) { - System.out.println("消费者2接收到 Direct key 为 {\"red\", \"yellow\"} 消息:【" + message + "】"); + @RabbitListener( + bindings = [QueueBinding( + value = Queue( + name = "direct.queue2", + durable = "true", + autoDelete = "false" + ), + exchange = Exchange( + name = "bunny.direct", + type = ExchangeTypes.DIRECT, + durable = "true", + autoDelete = "false" + ), + key = ["red", "yellow"] + )] + ) + fun listenDirectQueue2(message: String) { + println("消费者2接收到 Direct key 为 {\"red\", \"yellow\"} 消息:【$message】") } } \ No newline at end of file diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/ErrorListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/ErrorListener.kt index 22d2529..00a4ec4 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/ErrorListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/ErrorListener.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class ErrorListener { -} +class ErrorListener diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/FanoutListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/FanoutListener.kt index 2d4d0ff..7413c01 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/FanoutListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/FanoutListener.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class FanoutListener { -} +class FanoutListener diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/LazyListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/LazyListener.kt index c682154..f85bd46 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/LazyListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/LazyListener.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class LazyListener { -} +class LazyListener diff --git a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/TopicListener.kt b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/TopicListener.kt index 9363906..5c30c07 100644 --- a/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/TopicListener.kt +++ b/module/module-rabbitMQ/src/main/kotlin/cn/bunny/module/rabbitMQ/listener/TopicListener.kt @@ -1,9 +1,8 @@ -package cn.bunny.module.rabbitMQ.listener; +package cn.bunny.module.rabbitMQ.listener -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j +import org.springframework.stereotype.Component @Component @Slf4j -public class TopicListener { -} +class TopicListener diff --git a/pom.xml b/pom.xml index 28cc11e..73908c1 100644 --- a/pom.xml +++ b/pom.xml @@ -167,6 +167,11 @@ ${kotlin.version} test + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + diff --git a/services/pom.xml b/services/pom.xml index 78529e9..6ef044d 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -82,11 +82,21 @@ dynamic-datasource-spring-boot3-starter 4.3.1 + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + org.jetbrains.kotlin + kotlin-test + ${kotlin.version} + test + - ${project.basedir}/src/main/kotlin - src/test/kotlin + src/main/kotlin org.springframework.boot @@ -106,16 +116,10 @@ compile - process-sources + compile compile - - - src/main/kotlin - target/generated-sources/annotations - - test-compile @@ -132,7 +136,7 @@ spring - 17 + 1.8 @@ -142,6 +146,34 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + none + + + default-testCompile + none + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + +