Skip to content

Commit b65dc26

Browse files
authored
support x-rpc-spring-boot-starter (#16)
* support x-rpc-spring-boot-starter * update * update * update * update * update * update * udpate * update * update * update * update * add unit test * unit test passed * update
1 parent 6296c73 commit b65dc26

File tree

36 files changed

+1126
-38
lines changed

36 files changed

+1126
-38
lines changed

pom.xml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@
1414
<module>x-rpc-registry</module>
1515
<module>x-rpc-api</module>
1616
<module>x-rpc-test</module>
17+
<module>x-rpc-spring-boot-starter</module>
1718
</modules>
1819

1920
<properties>
2021
<java.version>1.8</java.version>
2122
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22-
<slf4j.version>2.0.7</slf4j.version>
23+
<slf4j.version>1.7.36</slf4j.version>
2324
<lombok.version>1.18.28</lombok.version>
2425

25-
<logback.version>1.3.11</logback.version>
26+
<logback.version>1.2.13</logback.version>
2627
<mockito.version>4.11.0</mockito.version>
2728
<junit5.version>5.9.1</junit5.version>
2829
</properties>
@@ -107,6 +108,13 @@
107108
<scope>test</scope>
108109
<version>${logback.version}</version>
109110
</dependency>
111+
112+
<dependency>
113+
<groupId>org.apache.curator</groupId>
114+
<artifactId>curator-test</artifactId>
115+
<version>5.7.1</version>
116+
<scope>test</scope>
117+
</dependency>
110118
<!-- test scope end -->
111119

112120
</dependencies>

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/cluster/router/RouterChain.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,23 @@
1616
*/
1717
package io.github.xinfra.lab.rpc.cluster.router;
1818

19-
public interface RouterChain extends Router {}
19+
import io.github.xinfra.lab.rpc.invoker.Invocation;
20+
import io.github.xinfra.lab.rpc.registry.ServiceInstance;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
24+
public class RouterChain {
25+
private List<Router> routers = new ArrayList<>();
26+
27+
public void addRouter(Router router) {
28+
routers.add(router);
29+
}
30+
31+
public List<ServiceInstance> route(
32+
Invocation invocation, List<ServiceInstance> serviceInstanceList) {
33+
for (Router router : routers) {
34+
serviceInstanceList = router.route(invocation, serviceInstanceList);
35+
}
36+
return serviceInstanceList;
37+
}
38+
}

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/config/ConsumerConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ public class ConsumerConfig {
3535

3636
private List<Filter> filters;
3737

38-
private RouterChain routerChain;
38+
private RouterChain routerChain = new RouterChain();
3939
}

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/config/ExporterConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ExporterConfig(Class<T> serviceInterfaceClass) {
2525
super(serviceInterfaceClass);
2626
}
2727

28-
private ProviderConfig providerConfig;
28+
protected ProviderConfig providerConfig;
2929

3030
private T serviceImpl;
3131

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/config/ProviderConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ public class ProviderConfig {
3030
private ProtocolConfig protocolConfig;
3131

3232
private List<Filter> filters;
33+
34+
private boolean autoRegister = true;
3335
}

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/config/ReferenceConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public ReferenceConfig(Class<T> serviceInterfaceClass) {
3030
super(serviceInterfaceClass);
3131
}
3232

33-
private ConsumerConfig consumerConfig;
33+
protected ConsumerConfig consumerConfig;
3434

3535
private ProxyType proxyType = ProxyType.JDK;
3636

x-rpc-api/src/main/java/io/github/xinfra/lab/rpc/registry/Registry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface Registry extends Closeable {
2727

2828
ServiceInstance getServiceInstance();
2929

30-
void register(ServiceConfig<?> serviceConfig);
30+
void register(List<? extends ServiceConfig<?>> serviceConfigs);
3131

3232
void update(ServiceInstance serviceInstance);
3333

x-rpc-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
<dependency>
2222
<groupId>io.github.xinfra.lab</groupId>
2323
<artifactId>x-rpc-transport-remoting</artifactId>
24-
<scope>provided</scope>
24+
<optional>true</optional>
2525
</dependency>
2626
<dependency>
2727
<groupId>io.github.xinfra.lab</groupId>
2828
<artifactId>x-rpc-registry-zookeeper</artifactId>
29-
<scope>provided</scope>
29+
<optional>true</optional>
3030
</dependency>
3131

3232
<!-- lombok -->

x-rpc-core/src/main/java/io/github/xinfra/lab/rpc/bootstrap/ConsumerBootstrap.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ public <T> T refer(ReferenceConfig<T> referenceConfig) {
9090
}
9191
}
9292

93+
public void unRefer(ReferenceConfig<?> referenceConfig) {
94+
// todo
95+
}
96+
9397
@Override
9498
public void close() throws IOException {
9599
registryManager.close();

x-rpc-core/src/main/java/io/github/xinfra/lab/rpc/bootstrap/ProviderBoostrap.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package io.github.xinfra.lab.rpc.bootstrap;
1818

19+
import com.google.common.collect.Lists;
1920
import io.github.xinfra.lab.rpc.config.ExporterConfig;
2021
import io.github.xinfra.lab.rpc.config.ProviderConfig;
2122
import io.github.xinfra.lab.rpc.config.RegistryConfig;
@@ -31,10 +32,15 @@
3132
import io.github.xinfra.lab.rpc.transport.ServerTransportManager;
3233
import java.io.Closeable;
3334
import java.io.IOException;
35+
import java.util.ArrayList;
36+
import java.util.List;
3437
import java.util.concurrent.atomic.AtomicBoolean;
3538
import org.apache.commons.lang3.Validate;
39+
import org.slf4j.Logger;
40+
import org.slf4j.LoggerFactory;
3641

3742
public class ProviderBoostrap implements Closeable {
43+
private static final Logger log = LoggerFactory.getLogger(ProviderBoostrap.class);
3844
private ProviderConfig providerConfig;
3945

4046
private ServerTransportManager serverTransportManager = new ServerTransportManager();
@@ -43,6 +49,8 @@ public class ProviderBoostrap implements Closeable {
4349

4450
private AtomicBoolean metadataServiceExported = new AtomicBoolean(false);
4551

52+
private List<ExporterConfig<?>> exportedExporterConfigs = new ArrayList<>();
53+
4654
public ProviderBoostrap(ProviderConfig providerConfig) {
4755
Validate.notNull(providerConfig);
4856
Validate.notNull(providerConfig.getApplicationConfig());
@@ -84,13 +92,27 @@ public void export(ExporterConfig<?> exporterConfig) {
8492
exportMetadataService(serverTransport, registry.getServiceInstance());
8593
}
8694

87-
// register
88-
registry.register(exporterConfig);
95+
// todo: check repeat export
96+
exportedExporterConfigs.add(exporterConfig);
97+
if (providerConfig.isAutoRegister()) {
98+
registry.register(Lists.newArrayList(exporterConfig));
99+
}
100+
}
101+
102+
public void register() {
103+
if (exportedExporterConfigs.isEmpty()) {
104+
log.info("XRpc no service exported, skip registry register.");
105+
return;
106+
}
107+
RegistryConfig<?> registryConfig = providerConfig.getRegistryConfig();
108+
Registry registry = registryManager.getRegistry(registryConfig);
109+
registry.register(exportedExporterConfigs);
110+
log.info("XRpc {} service registered.", exportedExporterConfigs.size());
89111
}
90112

91113
private void exportMetadataService(
92114
ServerTransport serverTransport, ServiceInstance serviceInstance) {
93-
ExporterConfig exporterConfig = new ExporterConfig(MetadataService.class);
115+
ExporterConfig<MetadataService> exporterConfig = new ExporterConfig<>(MetadataService.class);
94116
exporterConfig.setServiceImpl(new MetadataServiceImpl(serviceInstance));
95117
Invoker providerInvoker = new ProviderInvoker(exporterConfig);
96118
serverTransport.register(exporterConfig, providerInvoker);

0 commit comments

Comments
 (0)