Skip to content

Commit ede9938

Browse files
authored
Merge pull request #68 from hengboy/2.3.x
添加自定义MessagePipeConfiguration的配置类接口
2 parents f7f5d4f + d60e2c2 commit ede9938

File tree

10 files changed

+175
-14
lines changed

10 files changed

+175
-14
lines changed

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/client/MessagePipeClientAutoConfiguration.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.minbox.framework.api.boot.autoconfigure.message.pipe.client;
22

33
import org.minbox.framework.message.pipe.client.config.ClientConfiguration;
4-
import org.minbox.framework.message.pipe.spring.annotation.client.EnableMessagePipeClient;
54
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
65
import org.springframework.boot.context.properties.EnableConfigurationProperties;
76
import org.springframework.context.annotation.Bean;
@@ -13,7 +12,6 @@
1312
*/
1413
@ConditionalOnClass(ClientConfiguration.class)
1514
@EnableConfigurationProperties(MessagePipeClientProperties.class)
16-
@EnableMessagePipeClient
1715
public class MessagePipeClientAutoConfiguration {
1816
private MessagePipeClientProperties messagePipeClientProperties;
1917

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.minbox.framework.api.boot.autoconfigure.message.pipe.server;
2+
3+
import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration;
4+
5+
/**
6+
* The {@link MessagePipeConfiguration} Custom configuration interface definition
7+
* <p>
8+
* If there is a sequence, you can use the {@link org.springframework.core.annotation.Order} annotation to configure
9+
*
10+
* @author 恒宇少年
11+
*/
12+
@FunctionalInterface
13+
public interface MessagePipeConfigurationCustomizer {
14+
/**
15+
* To implement this method, it can be modified according to the parameter object
16+
*
17+
* @param configuration The {@link MessagePipeConfiguration} instance
18+
*/
19+
void customize(MessagePipeConfiguration configuration);
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.minbox.framework.api.boot.autoconfigure.message.pipe.server;
2+
3+
import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration;
4+
import org.springframework.boot.util.LambdaSafe;
5+
6+
import java.util.ArrayList;
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
/**
11+
* The wrapper class of {@link MessagePipeConfigurationCustomizer}
12+
* <p>
13+
* Execute {@link MessagePipeConfigurationCustomizer#customize} according to the order configured by {@link org.springframework.core.annotation.Order}
14+
*
15+
* @author 恒宇少年
16+
*/
17+
public class MessagePipeConfigurationCustomizers {
18+
private List<MessagePipeConfigurationCustomizer> customizers;
19+
20+
public MessagePipeConfigurationCustomizers(List<MessagePipeConfigurationCustomizer> customizers) {
21+
this.customizers = (customizers != null) ? new ArrayList<>(customizers) : Collections.emptyList();
22+
}
23+
24+
public MessagePipeConfiguration customizer(MessagePipeConfiguration configuration) {
25+
LambdaSafe.callbacks(MessagePipeConfigurationCustomizer.class, this.customizers, configuration)
26+
.withLogger(MessagePipeConfigurationCustomizer.class).invoke((customizer) -> customizer.customize(configuration));
27+
return configuration;
28+
}
29+
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerAutoConfiguration.java

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22

33
import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration;
44
import org.minbox.framework.message.pipe.server.config.ServerConfiguration;
5-
import org.minbox.framework.message.pipe.spring.annotation.server.EnableMessagePipeServer;
5+
import org.springframework.beans.factory.ObjectProvider;
66
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
78
import org.springframework.boot.context.properties.EnableConfigurationProperties;
89
import org.springframework.context.annotation.Bean;
910

11+
import java.util.List;
12+
import java.util.stream.Collectors;
13+
1014
/**
1115
* The Message Pipe Server configuration
1216
*
1317
* @author 恒宇少年
1418
*/
1519
@ConditionalOnClass(ServerConfiguration.class)
1620
@EnableConfigurationProperties(MessagePipeServerProperties.class)
17-
@EnableMessagePipeServer
1821
public class MessagePipeServerAutoConfiguration {
1922
private MessagePipeServerProperties messagePipeServerProperties;
2023

@@ -33,6 +36,21 @@ public ServerConfiguration serverConfiguration() {
3336
return messagePipeServerProperties.getConfiguration();
3437
}
3538

39+
/**
40+
* Instantiate the wrapper class of {@link MessagePipeConfigurationCustomizer}
41+
*
42+
* @param customizers The {@link MessagePipeConfigurationCustomizer} object provider
43+
* @return The {@link MessagePipeConfigurationCustomizers} instance
44+
*/
45+
@Bean
46+
@ConditionalOnMissingBean
47+
public MessagePipeConfigurationCustomizers messagePipeConfigurationCustomizers(
48+
ObjectProvider<MessagePipeConfigurationCustomizer> customizers) {
49+
List<MessagePipeConfigurationCustomizer> sortedCustomizers =
50+
customizers.orderedStream().collect(Collectors.toList());
51+
return new MessagePipeConfigurationCustomizers(sortedCustomizers);
52+
}
53+
3654
/**
3755
* Create {@link MessagePipeConfiguration}
3856
* <p>
@@ -41,14 +59,36 @@ public ServerConfiguration serverConfiguration() {
4159
* @return The {@link MessagePipeConfiguration} instance
4260
*/
4361
@Bean
44-
public MessagePipeConfiguration messagePipeConfiguration() {
62+
public MessagePipeConfiguration messagePipeConfiguration(MessagePipeConfigurationCustomizers customizers) {
4563
MessagePipeConfiguration configuration = MessagePipeConfiguration.defaultConfiguration();
46-
MessagePipeConfiguration.LockTime lockTime =
47-
new MessagePipeConfiguration.LockTime()
48-
.setLeaseTime(messagePipeServerProperties.getLockLeaseTime())
49-
.setTimeUnit(messagePipeServerProperties.getLockLeaseTimeUnit());
50-
configuration.setLockTime(lockTime);
51-
configuration.setDistributionMessagePoolSize(messagePipeServerProperties.getDistributionMessagePoolSize());
52-
return configuration;
64+
return customizers.customizer(configuration);
65+
}
66+
67+
/**
68+
* Configuration {@link MessagePipeConfiguration#setLockTime}
69+
*
70+
* @return The {@link MessagePipeConfigurationCustomizer} instance of {@link MessagePipeConfiguration.LockTime}
71+
*/
72+
@Bean
73+
public MessagePipeConfigurationCustomizer customizerLockTime() {
74+
return configuration -> {
75+
MessagePipeConfiguration.LockTime lockTime =
76+
new MessagePipeConfiguration.LockTime()
77+
.setLeaseTime(messagePipeServerProperties.getLockLeaseTime())
78+
.setTimeUnit(messagePipeServerProperties.getLockLeaseTimeUnit());
79+
configuration.setLockTime(lockTime);
80+
};
81+
}
82+
83+
/**
84+
* Configuration {@link MessagePipeConfiguration#setMessagePipeMonitorMillis}
85+
*
86+
* @return The {@link MessagePipeConfigurationCustomizer} instance of monitor millis
87+
*/
88+
@Bean
89+
public MessagePipeConfigurationCustomizer customizerMonitorTime() {
90+
return configuration ->
91+
configuration.setMessagePipeMonitorMillis(messagePipeServerProperties.getMessagePipeMonitorMillis());
92+
5393
}
5494
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe/server/MessagePipeServerProperties.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,11 @@ public class MessagePipeServerProperties {
3737
/**
3838
* The number of threads in the message thread pool
3939
*/
40+
@Deprecated
4041
private int distributionMessagePoolSize = 10;
42+
/**
43+
* The interval time for each message pipeline to perform monitoring
44+
* time unit: milliseconds
45+
*/
46+
private long messagePipeMonitorMillis = 10000L;
4147
}

api-boot-samples/api-boot-sample-logging/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
<plugin>
7777
<groupId>org.springframework.boot</groupId>
7878
<artifactId>spring-boot-maven-plugin</artifactId>
79+
<version>${spring-boot.version}</version>
7980
<configuration>
8081
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
8182
</configuration>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.minbox.framework.api.boot.sample.message.pipe.server;
2+
3+
import org.minbox.framework.message.pipe.server.processing.push.PushMessageEvent;
4+
import org.minbox.framework.message.pipe.spring.annotation.ServerServiceType;
5+
import org.minbox.framework.message.pipe.spring.annotation.server.EnableMessagePipeServer;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.data.redis.connection.RedisConnectionFactory;
9+
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
10+
11+
/**
12+
* 消息管道Server相关配置
13+
*
14+
* @author 恒宇少年
15+
*/
16+
@Configuration
17+
@EnableMessagePipeServer(serverType = ServerServiceType.GRPC)
18+
public class MessagePipeServerConfiguration {
19+
/**
20+
* 配置Redis监听容器
21+
* <p>
22+
* 新消息写入消息管道时,
23+
* 会触发{@link PushMessageEvent}事件,而该事件的监听方式则是采用的Redis的KeyEvent的形式
24+
*
25+
* @param connectionFactory Redis连接工厂对象
26+
* @return The {@link RedisMessageListenerContainer} instance
27+
*/
28+
@Bean
29+
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
30+
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
31+
container.setConnectionFactory(connectionFactory);
32+
return container;
33+
}
34+
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.minbox.framework.api.boot.sample.message.pipe.server;
2+
3+
import org.minbox.framework.api.boot.autoconfigure.message.pipe.server.MessagePipeConfigurationCustomizer;
4+
import org.minbox.framework.message.pipe.core.transport.RequestIdGenerator;
5+
import org.minbox.framework.message.pipe.server.config.MessagePipeConfiguration;
6+
import org.springframework.stereotype.Component;
7+
8+
import java.util.UUID;
9+
10+
/**
11+
* 自定义配置{@link org.minbox.framework.message.pipe.core.transport.RequestIdGenerator}
12+
*
13+
* @author 恒宇少年
14+
*/
15+
@Component
16+
public class RequestIdCustomizer implements MessagePipeConfigurationCustomizer {
17+
@Override
18+
public void customize(MessagePipeConfiguration configuration) {
19+
RequestIdGenerator generator = new UuidRequestIdGenerator();
20+
configuration.setRequestIdGenerator(generator);
21+
}
22+
23+
/**
24+
* 使用Uuid随机数生成请求ID
25+
*/
26+
class UuidRequestIdGenerator implements RequestIdGenerator {
27+
@Override
28+
public String generate() {
29+
return UUID.randomUUID().toString();
30+
}
31+
}
32+
}

api-boot-samples/api-boot-sample-mybatis-enhance-codegen/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
<plugin>
7171
<groupId>org.minbox.framework</groupId>
7272
<artifactId>api-boot-mybatis-enhance-maven-codegen</artifactId>
73-
<version>${api-boot.version}</version>
73+
<version>2.3.1.RELEASE</version>
7474
<dependencies>
7575
<!--数据驱动依赖-->
7676
<dependency>

api-boot-samples/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<!--Samples所使用的ApiBoot版本-->
1919
<api-boot.version>${project.version}</api-boot.version>
2020
<!--Samples所使用的SpringBoot版本-->
21-
<spring-boot.version>2.3.1.RELEASE</spring-boot.version>
21+
<spring-boot.version>2.3.3.RELEASE</spring-boot.version>
2222
</properties>
2323
<artifactId>api-boot-samples</artifactId>
2424
<packaging>pom</packaging>

0 commit comments

Comments
 (0)