我才刚刚开始学习Vert.x以及如何编写Verticles。我想知道从应用程序服务器或Tomcat之类的Web服务器中部署Verticle是否有意义。例如:
public class HelloVerticle extends AbstractVerticle {
private final Logger logger = LoggerFactory.getLogger(HelloVerticle.class);
private long counter = 1;
@Override
public void start() {
vertx.setPeriodic(5000, id -> {
logger.info("tick");
});
vertx.createHttpServer()
.requestHandler(req -> {
logger.info("Request #{} from {}", counter++, req.remoteAddress().host());
req.response().end("Hello!");
})
.listen(9080);
logger.info("Open http://localhost:9080/");
}
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new HelloVerticle());
}
}
显然,主要方法需要由Application Server提供的任何触发器的某些ContextListener代替。是否有意义或在此上下文中不应该使用Vert.x? 谢谢
答案 0 :(得分:0)
在我的POV中,将Vert.x用作Tomcat应用程序中的Verticle并没有多大意义,因为它破坏了组件化的整个重点。
另一方面,您可能只想连接到事件总线来发送/发布/接收消息,并且很容易实现。
我在Grails(基于SB)项目中做到了这一点,并将Vertx内容放入service
中,例如:
class VertxService {
Vertx vertx
@PostConstruct
void init() {
def options = [:]
Vertx.clusteredVertx(options){ res ->
if (res.succeeded())
vertx = res.result()
else
System.exit( -1 )
})
}
void publish( addr, msg ){ vertx.publish addr, msg }
//...
}