Vertx Java 使用 Future Callback 部署一个 JavaScript verticle
Vertx Java deploy a JavaScript verticle with Future Callback
我想在我的 Java VertX 中部署一个 javascript Verticle。当然,这不是问题。问题是,我怎样才能给他们回电?
我的Java代码:
Vertx.clusteredVertx(vertxOptions, res ->
{
if (res.succeeded()) {
logger.info("Cluster ready, starting verticle deploy");
/*
* React JS Server Deploy
*/
Future< String > reactVerticleFuture = Future.future();
vertx.executeBlocking(future ->
{
vertx.deployVerticle("dist/server.js", options, deployResult ->
{
if (deployResult.succeeded()) {
future.complete();
} else {
future.fail(deployResult.cause());
}
});
} , reactVerticleFuture.completer());
CompositeFuture.all(..., reactVerticleFuture).setHandler(ar ->
{
/*
* deploy http listener and health endpoint
*/
});
} else {
logger.error(res.cause().getMessage(), res.cause());
}
});
我的server.js:
exports.vertxStartAsync = function(startFuture) {
console.log('vertxStartAsync')
var eb = vertx.eventBus()
var consumer = eb.consumer('httpGetWebChannel', function (message) {
})
consumer.completionHandler(function (res, res_err) {
if (res_err == null) {
console.log("The handler registration has reached all nodes");
startFuture.complete()
} else {
console.log("Registration failed!");
startFuture.fail()
}
});
}
当然,我的server.js比较大,这需要一些时间来启动。在我的集群 Vertx 中,我在开始时收到一些消息,提示某些东西阻塞了我的总线。
我该如何解决这个问题?
谢谢
马塞尔
好的,我们找到了解决方案(alexvetter - 感谢您的耐心等待)。
问题是我用 webpack 构建了我的 server.js 文件,构建之后,exports 块在一个函数中。
这是可行的解决方案:
webpack.config.js
var WrapperPlugin = require('wrapper-webpack-plugin');
...
plugins: [
new WrapperPlugin({
header: 'exports.vertxStartAsync = function(startFuture) {\n',
footer: '}\n'
}),
...
]
...
server.js
var eb = vertx.eventBus()
var consumer = eb.consumer('httpGetWebChannel', function (message) {
...
})
consumer.completionHandler(function (res, res_err) {
if (res_err == null) {
console.log("The handler registration has reached all nodes");
startFuture.complete()
} else {
console.log("Registration failed!");
startFuture.fail()
}
});
谢谢
我想在我的 Java VertX 中部署一个 javascript Verticle。当然,这不是问题。问题是,我怎样才能给他们回电?
我的Java代码:
Vertx.clusteredVertx(vertxOptions, res ->
{
if (res.succeeded()) {
logger.info("Cluster ready, starting verticle deploy");
/*
* React JS Server Deploy
*/
Future< String > reactVerticleFuture = Future.future();
vertx.executeBlocking(future ->
{
vertx.deployVerticle("dist/server.js", options, deployResult ->
{
if (deployResult.succeeded()) {
future.complete();
} else {
future.fail(deployResult.cause());
}
});
} , reactVerticleFuture.completer());
CompositeFuture.all(..., reactVerticleFuture).setHandler(ar ->
{
/*
* deploy http listener and health endpoint
*/
});
} else {
logger.error(res.cause().getMessage(), res.cause());
}
});
我的server.js:
exports.vertxStartAsync = function(startFuture) {
console.log('vertxStartAsync')
var eb = vertx.eventBus()
var consumer = eb.consumer('httpGetWebChannel', function (message) {
})
consumer.completionHandler(function (res, res_err) {
if (res_err == null) {
console.log("The handler registration has reached all nodes");
startFuture.complete()
} else {
console.log("Registration failed!");
startFuture.fail()
}
});
}
当然,我的server.js比较大,这需要一些时间来启动。在我的集群 Vertx 中,我在开始时收到一些消息,提示某些东西阻塞了我的总线。
我该如何解决这个问题?
谢谢 马塞尔
好的,我们找到了解决方案(alexvetter - 感谢您的耐心等待)。
问题是我用 webpack 构建了我的 server.js 文件,构建之后,exports 块在一个函数中。
这是可行的解决方案:
webpack.config.js
var WrapperPlugin = require('wrapper-webpack-plugin');
...
plugins: [
new WrapperPlugin({
header: 'exports.vertxStartAsync = function(startFuture) {\n',
footer: '}\n'
}),
...
]
...
server.js
var eb = vertx.eventBus()
var consumer = eb.consumer('httpGetWebChannel', function (message) {
...
})
consumer.completionHandler(function (res, res_err) {
if (res_err == null) {
console.log("The handler registration has reached all nodes");
startFuture.complete()
} else {
console.log("Registration failed!");
startFuture.fail()
}
});
谢谢