From c0028a4ae68ce046324bc8222f2ab3034d0de290 Mon Sep 17 00:00:00 2001 From: hengboy Date: Mon, 7 Sep 2020 10:44:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?:rocket:=20=E6=96=B0=E5=A2=9EMessagePipeCon?= =?UTF-8?q?figuration=E9=85=8D=E7=BD=AE=E7=B1=BB=E7=9A=84Customizer?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MessagePipeClientAutoConfiguration.java | 2 - .../MessagePipeConfigurationCustomizer.java | 20 +++++++ .../MessagePipeConfigurationCustomizers.java | 29 +++++++++ .../MessagePipeServerAutoConfiguration.java | 60 +++++++++++++++---- .../server/MessagePipeServerProperties.java | 6 ++ .../MessagePipeServerConfiguration.java | 35 +++++++++++ .../pipe/server/RequestIdCustomizer.java | 32 ++++++++++ 7 files changed, 172 insertions(+), 12 deletions(-) create mode 100644 api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizer.java create mode 100644 api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizers.java create mode 100644 api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/MessagePipeServerConfiguration.java create mode 100644 api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/RequestIdCustomizer.java diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/client/MessagePipeClientAutoConfiguration.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/client/MessagePipeClientAutoConfiguration.java index 09013c4c..01cc71c7 100644 --- a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/client/MessagePipeClientAutoConfiguration.java +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/client/MessagePipeClientAutoConfiguration.java @@ -1,7 +1,6 @@ package org.minbox.framework.api.boot.autoconfigure.message.pipe.client; import org.minbox.framework.message.pipe.client.config.ClientConfiguration; -import org.minbox.framework.message.pipe.spring.annotation.client.EnableMessagePipeClient; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -13,7 +12,6 @@ */ @ConditionalOnClass(ClientConfiguration.class) @EnableConfigurationProperties(MessagePipeClientProperties.class) -@EnableMessagePipeClient public class MessagePipeClientAutoConfiguration { private MessagePipeClientProperties messagePipeClientProperties; diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizer.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizer.java new file mode 100644 index 00000000..574855ad --- /dev/null +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizer.java @@ -0,0 +1,20 @@ +package org.minbox.framework.api.boot.autoconfigure.message.pipe.server; + +import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration; + +/** + * The {@link MessagePipeConfiguration} Custom configuration interface definition + *

+ * If there is a sequence, you can use the {@link org.springframework.core.annotation.Order} annotation to configure + * + * @author 恒宇少年 + */ +@FunctionalInterface +public interface MessagePipeConfigurationCustomizer { + /** + * To implement this method, it can be modified according to the parameter object + * + * @param configuration The {@link MessagePipeConfiguration} instance + */ + void customize(MessagePipeConfiguration configuration); +} diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizers.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizers.java new file mode 100644 index 00000000..a49d89d8 --- /dev/null +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeConfigurationCustomizers.java @@ -0,0 +1,29 @@ +package org.minbox.framework.api.boot.autoconfigure.message.pipe.server; + +import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration; +import org.springframework.boot.util.LambdaSafe; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * The wrapper class of {@link MessagePipeConfigurationCustomizer} + *

+ * Execute {@link MessagePipeConfigurationCustomizer#customize} according to the order configured by {@link org.springframework.core.annotation.Order} + * + * @author 恒宇少年 + */ +public class MessagePipeConfigurationCustomizers { + private List customizers; + + public MessagePipeConfigurationCustomizers(List customizers) { + this.customizers = (customizers != null) ? new ArrayList<>(customizers) : Collections.emptyList(); + } + + public MessagePipeConfiguration customizer(MessagePipeConfiguration configuration) { + LambdaSafe.callbacks(MessagePipeConfigurationCustomizer.class, this.customizers, configuration) + .withLogger(MessagePipeConfigurationCustomizer.class).invoke((customizer) -> customizer.customize(configuration)); + return configuration; + } +} diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerAutoConfiguration.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerAutoConfiguration.java index 4bab8a16..c87535cb 100644 --- a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerAutoConfiguration.java +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerAutoConfiguration.java @@ -2,11 +2,15 @@ import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration; import org.minbox.framework.message.pipe.server.config.ServerConfiguration; -import org.minbox.framework.message.pipe.spring.annotation.server.EnableMessagePipeServer; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import java.util.List; +import java.util.stream.Collectors; + /** * The Message Pipe Server configuration * @@ -14,7 +18,6 @@ */ @ConditionalOnClass(ServerConfiguration.class) @EnableConfigurationProperties(MessagePipeServerProperties.class) -@EnableMessagePipeServer public class MessagePipeServerAutoConfiguration { private MessagePipeServerProperties messagePipeServerProperties; @@ -33,6 +36,21 @@ public ServerConfiguration serverConfiguration() { return messagePipeServerProperties.getConfiguration(); } + /** + * Instantiate the wrapper class of {@link MessagePipeConfigurationCustomizer} + * + * @param customizers The {@link MessagePipeConfigurationCustomizer} object provider + * @return The {@link MessagePipeConfigurationCustomizers} instance + */ + @Bean + @ConditionalOnMissingBean + public MessagePipeConfigurationCustomizers messagePipeConfigurationCustomizers( + ObjectProvider customizers) { + List sortedCustomizers = + customizers.orderedStream().collect(Collectors.toList()); + return new MessagePipeConfigurationCustomizers(sortedCustomizers); + } + /** * Create {@link MessagePipeConfiguration} *

@@ -41,14 +59,36 @@ public ServerConfiguration serverConfiguration() { * @return The {@link MessagePipeConfiguration} instance */ @Bean - public MessagePipeConfiguration messagePipeConfiguration() { + public MessagePipeConfiguration messagePipeConfiguration(MessagePipeConfigurationCustomizers customizers) { MessagePipeConfiguration configuration = MessagePipeConfiguration.defaultConfiguration(); - MessagePipeConfiguration.LockTime lockTime = - new MessagePipeConfiguration.LockTime() - .setLeaseTime(messagePipeServerProperties.getLockLeaseTime()) - .setTimeUnit(messagePipeServerProperties.getLockLeaseTimeUnit()); - configuration.setLockTime(lockTime); - configuration.setDistributionMessagePoolSize(messagePipeServerProperties.getDistributionMessagePoolSize()); - return configuration; + return customizers.customizer(configuration); + } + + /** + * Configuration {@link MessagePipeConfiguration#setLockTime} + * + * @return The {@link MessagePipeConfigurationCustomizer} instance of {@link MessagePipeConfiguration.LockTime} + */ + @Bean + public MessagePipeConfigurationCustomizer customizerLockTime() { + return configuration -> { + MessagePipeConfiguration.LockTime lockTime = + new MessagePipeConfiguration.LockTime() + .setLeaseTime(messagePipeServerProperties.getLockLeaseTime()) + .setTimeUnit(messagePipeServerProperties.getLockLeaseTimeUnit()); + configuration.setLockTime(lockTime); + }; + } + + /** + * Configuration {@link MessagePipeConfiguration#setMessagePipeMonitorMillis} + * + * @return The {@link MessagePipeConfigurationCustomizer} instance of monitor millis + */ + @Bean + public MessagePipeConfigurationCustomizer customizerMonitorTime() { + return configuration -> + configuration.setMessagePipeMonitorMillis(messagePipeServerProperties.getMessagePipeMonitorMillis()); + } } diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerProperties.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerProperties.java index 0567a704..cbb150bf 100644 --- a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerProperties.java +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerProperties.java @@ -37,5 +37,11 @@ public class MessagePipeServerProperties { /** * The number of threads in the message thread pool */ + @Deprecated private int distributionMessagePoolSize = 10; + /** + * The interval time for each message pipeline to perform monitoring + * time unit: milliseconds + */ + private long messagePipeMonitorMillis = 10000L; } diff --git a/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/MessagePipeServerConfiguration.java b/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/MessagePipeServerConfiguration.java new file mode 100644 index 00000000..756e9a92 --- /dev/null +++ b/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/MessagePipeServerConfiguration.java @@ -0,0 +1,35 @@ +package org.minbox.framework.api.boot.sample.message.pipe.server; + +import org.minbox.framework.message.pipe.server.processing.push.PushMessageEvent; +import org.minbox.framework.message.pipe.spring.annotation.ServerServiceType; +import org.minbox.framework.message.pipe.spring.annotation.server.EnableMessagePipeServer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +/** + * 消息管道Server相关配置 + * + * @author 恒宇少年 + */ +@Configuration +@EnableMessagePipeServer(serverType = ServerServiceType.GRPC) +public class MessagePipeServerConfiguration { + /** + * 配置Redis监听容器 + *

+ * 新消息写入消息管道时, + * 会触发{@link PushMessageEvent}事件,而该事件的监听方式则是采用的Redis的KeyEvent的形式 + * + * @param connectionFactory Redis连接工厂对象 + * @return The {@link RedisMessageListenerContainer} instance + */ + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + return container; + } + +} diff --git a/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/RequestIdCustomizer.java b/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/RequestIdCustomizer.java new file mode 100644 index 00000000..9eb0cd96 --- /dev/null +++ b/api-boot-samples/api-boot-sample-message-pipe-server/src/main/java/org/minbox/framework/api/boot/sample/message/pipe/server/RequestIdCustomizer.java @@ -0,0 +1,32 @@ +package org.minbox.framework.api.boot.sample.message.pipe.server; + +import org.minbox.framework.api.boot.autoconfigure.message.pipe.server.MessagePipeConfigurationCustomizer; +import org.minbox.framework.message.pipe.core.transport.RequestIdGenerator; +import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * 自定义配置{@link org.minbox.framework.message.pipe.core.transport.RequestIdGenerator} + * + * @author 恒宇少年 + */ +@Component +public class RequestIdCustomizer implements MessagePipeConfigurationCustomizer { + @Override + public void customize(MessagePipeConfiguration configuration) { + RequestIdGenerator generator = new UuidRequestIdGenerator(); + configuration.setRequestIdGenerator(generator); + } + + /** + * 使用Uuid随机数生成请求ID + */ + class UuidRequestIdGenerator implements RequestIdGenerator { + @Override + public String generate() { + return UUID.randomUUID().toString(); + } + } +} From 0d24c8bd3022812827177f3c6222c3d96b6854f9 Mon Sep 17 00:00:00 2001 From: hengboy Date: Mon, 7 Sep 2020 10:46:24 +0800 Subject: [PATCH 2/3] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8DCi=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=9E=84=E5=BB=BA=E6=97=B6=E9=81=87=E5=88=B0=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api-boot-samples/api-boot-sample-logging/pom.xml | 1 + api-boot-samples/pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api-boot-samples/api-boot-sample-logging/pom.xml b/api-boot-samples/api-boot-sample-logging/pom.xml index e5352012..f7d827e1 100644 --- a/api-boot-samples/api-boot-sample-logging/pom.xml +++ b/api-boot-samples/api-boot-sample-logging/pom.xml @@ -76,6 +76,7 @@ org.springframework.boot spring-boot-maven-plugin + ${spring-boot.version} -Dfile.encoding=UTF-8 diff --git a/api-boot-samples/pom.xml b/api-boot-samples/pom.xml index 929fe2a2..a39ef792 100644 --- a/api-boot-samples/pom.xml +++ b/api-boot-samples/pom.xml @@ -18,7 +18,7 @@ ${project.version} - 2.3.1.RELEASE + 2.3.3.RELEASE api-boot-samples pom From d60e2c2e4b9bf1b096c43da5d67bc5889e00b532 Mon Sep 17 00:00:00 2001 From: hengboy Date: Mon, 7 Sep 2020 10:50:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8Dmybatis=20enhance?= =?UTF-8?q?=20plugin=E6=97=A0=E6=B3=95=E6=89=BE=E5=88=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api-boot-sample-mybatis-enhance-codegen/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-boot-samples/api-boot-sample-mybatis-enhance-codegen/pom.xml b/api-boot-samples/api-boot-sample-mybatis-enhance-codegen/pom.xml index e94f708d..ea6b707c 100644 --- a/api-boot-samples/api-boot-sample-mybatis-enhance-codegen/pom.xml +++ b/api-boot-samples/api-boot-sample-mybatis-enhance-codegen/pom.xml @@ -70,7 +70,7 @@ org.minbox.framework api-boot-mybatis-enhance-maven-codegen - ${api-boot.version} + 2.3.1.RELEASE