vert.x - 如何在 Web 服务器/应用服务器上部署 Verticle?
问题描述
我刚刚开始学习 Vert.x 以及如何编写 Verticle。我想知道从应用程序服务器或像 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());
}
}
显然,main 方法需要替换为 Application Server 提供的任何触发器的某个 ContextListener。它有什么意义还是不应该在这个上下文中使用 Vert.x?谢谢
解决方案
从我的 POV 来看,在 Tomcat 应用程序中使用 Vert.x 作为 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 }
//...
}
推荐阅读
- python - 获取 HyperlinkedRelatedField(many=True) 的查询集
- angular - 角度测试 HostListener
- reporting-services - CRM 2011,显示用户列表的 SSRS 报告,列中包含团队
- bixby - 如何解决无效的胶囊名称?
- excel - 大选择时条件格式设置缓慢
- mysql - 使用 DTSX 包从 SQL Server 到 MySQL 的夜间数据导出/导入
- scala - 将 udf 函数与 Spark DataFrame 一起使用时出现异常
- perl - Perlbrew 无法下载最新的压缩包
- vue.js - 如何在 v-model 中获取对象?验证
- regex - Github“分支名称模式”否定