Skip to content

Commit f297298

Browse files
committed
improved logic/design pattern on Microservice deployment
1 parent 3a0b4bd commit f297298

File tree

3 files changed

+66
-31
lines changed

3 files changed

+66
-31
lines changed

administration-microservice/src/main/java/io/vertx/easyerp/microservice/administration/AdministrationService.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@
55
import io.vertx.codegen.annotations.VertxGen;
66
import io.vertx.core.AsyncResult;
77
import io.vertx.core.Handler;
8-
import io.vertx.core.json.JsonObject;
9-
import io.vertx.core.logging.Logger;
10-
import io.vertx.core.logging.LoggerFactory;
11-
import io.vertx.easyerp.microservice.administration.impl.AdministrationImpl;
128
import io.vertx.easyerp.microservice.administration.jpojo.User;
139

14-
import java.sql.ResultSet;
15-
import java.util.Optional;
16-
1710
/**
1811
* A service interface managing Users.
1912
* <p>

administration-microservice/src/main/java/io/vertx/easyerp/microservice/administration/AdministrationVerticle.java

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,92 @@
33
import io.vertx.core.DeploymentOptions;
44
import io.vertx.core.Future;
55
import io.vertx.core.Promise;
6-
import io.vertx.easyerp.microservice.administration.api.RestAdministrationAPIVerticle;
6+
import io.vertx.core.json.JsonObject;
7+
import io.vertx.core.logging.Logger;
8+
import io.vertx.core.logging.LoggerFactory;
9+
import io.vertx.easyerp.microservice.administration.api.AdministrationRestAPIVerticle;
710
import io.vertx.easyerp.microservice.administration.impl.AdministrationImpl;
811
import io.vertx.easyerp.microservice.common.BaseMicroserviceVerticle;
12+
import static io.vertx.easyerp.microservice.common.config.ConfigRetrieverHelper.configurationRetriever;
913
import io.vertx.serviceproxy.ProxyHelper;
1014

1115
public class AdministrationVerticle extends BaseMicroserviceVerticle {
16+
private static final long SCAN_PERIOD = 20000L;
17+
private static final String PATH = "/conf/vertx.conf";
18+
private final static Logger logger = LoggerFactory.getLogger(AdministrationVerticle.class);
1219

1320
@Override
1421
public void start(Promise<Void> startPromise) throws Exception {
1522
super.start();
1623

17-
// create the service instance
18-
AdministrationService service = new AdministrationImpl(vertx, config());
19-
20-
// register the service proxy on event bus NB: must change from ProxyHelper to ServiceBinder
21-
ProxyHelper.registerService(AdministrationService.class, vertx, service, service.SERVICE_ADDRESS);
22-
23-
/* ping database and-then publish the service in the discovery infrastructure
24-
*/
25-
pingPersistence(service)
26-
.compose(databaseOK -> publishEventBusService(service.SERVICE_NAME, service.SERVICE_ADDRESS, AdministrationService.class))
27-
.compose(servicePublised -> deployRestService(service))
28-
.onComplete(startPromise);
24+
//Smuggling the service instance
25+
loadConfigsAndRegisterService(PATH)
26+
/* ping database and-then publish the service in the discovery infrastructure
27+
*/
28+
.compose(loadOk -> pingPersistence(loadOk))
29+
.compose(databaseOK -> publishEventBusService(AdministrationService.SERVICE_NAME, AdministrationService.SERVICE_ADDRESS, databaseOK))
30+
.compose(servicePublisedOk -> deployRestService(servicePublisedOk))
31+
.onComplete(startPromise);
2932
}
3033

31-
private Future<Void> pingPersistence(AdministrationService service){
34+
/**
35+
* Ping the persistence backend to see if its up
36+
*
37+
* @param service instance
38+
* @return service instance to be used in next stage
39+
*/
40+
private Future<AdministrationService> pingPersistence(final AdministrationService service){
3241
Promise<Void> initPromise = Promise.promise();
3342
service.initializePersistence(initPromise);
3443
return initPromise.future().map(r->{
3544
///Perform some init db operations here
36-
return null;
45+
return service;
3746
});
3847

3948
}
4049

50+
/**
51+
* Deploy the admin microservice
52+
*
53+
* @param service instance
54+
* @return
55+
*/
4156
private Future<Void> deployRestService(AdministrationService service){
4257
Promise<String> promise = Promise.promise();
43-
vertx.deployVerticle(new RestAdministrationAPIVerticle(service),
58+
vertx.deployVerticle(new AdministrationRestAPIVerticle(service),
4459
new DeploymentOptions().setConfig(config()),
4560
promise);
46-
return promise.future().map(r->null);
61+
return promise.future().map(
62+
ret -> null
63+
);
64+
}
65+
66+
67+
/**
68+
* Load configurations, create and register the service for propagation
69+
*
70+
* @param path configuration file path
71+
* @return service instance to be use in next stage
72+
*/
73+
private Future<AdministrationService> loadConfigsAndRegisterService(final String path) {
74+
Promise<JsonObject> initConfigPromise = Promise.promise();
75+
76+
//get environmental variables using the path provided
77+
configurationRetriever
78+
.usingScanPeriod(SCAN_PERIOD)
79+
.withFileStore(path)
80+
.createConfig(vertx)
81+
.onComplete(initConfigPromise);
82+
return initConfigPromise.future().map(conf -> {
83+
84+
// create the service instance
85+
final AdministrationService service = new AdministrationImpl(vertx, config().mergeIn(conf));
86+
87+
// register the service proxy on event bus NB: must change from ProxyHelper to ServiceBinder
88+
ProxyHelper.registerService(AdministrationService.class, vertx, service, service.SERVICE_ADDRESS);
89+
90+
logger.info("Initializing config:::" + config());
91+
return service;
92+
});
4793
}
4894
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.vertx.easyerp.microservice.administration.api;
22

3-
import io.vertx.core.AsyncResult;
4-
import io.vertx.core.Future;
3+
54
import io.vertx.core.Promise;
65
import io.vertx.core.json.DecodeException;
76
import io.vertx.core.json.JsonObject;
@@ -12,9 +11,8 @@
1211
import io.vertx.ext.web.RoutingContext;
1312
import io.vertx.ext.web.handler.BodyHandler;
1413

15-
public class RestAdministrationAPIVerticle extends RestAPIVerticle {
14+
public class AdministrationRestAPIVerticle extends RestAPIVerticle {
1615
public static final String SERVICE_NAME = "administration-rest-api";
17-
1816
private static final String API_ADD_USER = "/add";
1917
private static final String API_RETRIEVE_USER_BY_ID = "/user";
2018
private static final String API_RETRIEVE_ALL_USER = "/users";
@@ -25,7 +23,7 @@ public class RestAdministrationAPIVerticle extends RestAPIVerticle {
2523

2624
private final AdministrationService service;
2725

28-
public RestAdministrationAPIVerticle(AdministrationService service) {
26+
public AdministrationRestAPIVerticle(AdministrationService service) {
2927
this.service = service;
3028
}
3129

@@ -67,6 +65,4 @@ private void apiRetrieveUser(RoutingContext context) {
6765
String userId = context.request().getParam("userId");
6866
service.retrieveUser(userId, resultHandlerNonEmpty(context));
6967
}
70-
71-
7268
}

0 commit comments

Comments
 (0)