我是Vert.x的新手,我想通過jar運行多個Verticle。我有兩個文件,一個是MyFirstVertice.java,它路由路徑「/ q1/」並返回一些內容。第二個是路由「/ q2/」的MySecondVertice.java。第二個頂點被部署在第一個頂點。如何在Vert.x中運行多個頂點?
MyFirstVertice.java
public class MyFirstVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> fut) throws Exception {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route("/q1/*").handler(routingContext -> {
HttpServerRequest request = routingContext.request();
String Y = request.getParam("key");
String cipherText = request.getParam("message");
HttpServerResponse response = routingContext.response();
response.setChunked(true);
response.putHeader("content-type", "text/plain");
response.write(Y + "\n");
response.write(cipherText + "\n");
response.end();
vertx.deployVerticle(new MySecondVerticle(), stringAsyncResult -> {
System.out.println("Second verticle is deployed successfully.");
});
});
server.requestHandler(router::accept).listen(8080, httpServerAsyncResult -> {
if (httpServerAsyncResult.succeeded()) {
fut.complete();
} else {
fut.fail(httpServerAsyncResult.cause());
}
});
}
}
MySecondVetice.java
public class MySecondVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> fut) throws Exception {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route("/q2/*").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.setChunked(true);
response.putHeader("content-type", "text/plain");
response.end("q2");
});
server.requestHandler(router::accept).listen(8080, httpServerAsyncResult -> {
if (httpServerAsyncResult.succeeded()) {
fut.complete();
} else {
fut.fail(httpServerAsyncResult.cause());
}
});
}
}
我的pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>io.vertx.core.Starter</Main-Class>
<Main-Verticle>tutorial.diluo.MyFirstVerticle</Main-Verticle>
</manifestEntries>
</transformer>
</transformers>
<artifactSet/>
<outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
</configuration>
</execution>
</executions>
</plugin>
我運行它通過java -jar xxx-fat.jar
。
當我在瀏覽器中輸入localhost:8080/q1/xxx時,它可以返回所需的內容。但是當我嘗試訪問localhost:8080/q2/xxx時,它會顯示「未找到資源」。你能告訴我如何部署兩個不同路徑的Verticle嗎?我知道我可以在同一個Verticle中路由不同的pathe,我只想知道如何部署和運行多個頂點。提前致謝!
似乎是一個糟糕的設計理念。您可以在同一個路由器上的多個路線,不同的處理程序。你真的只需要一個Web服務Verticle,而不是兩個。您可以使用Vert.x參數「-instances#」開始在同一Web服務器Verticle如果多個Verticles你想分散負載一些。 – Quintium