Ich bin neu in Vert.x und ich möchte mehrere verticles durch jar ausführen. Ich habe zwei Dateien, eine ist MyFirstVertice.java und es leitet den Pfad "/ q1/" und etwas zurück. Die zweite ist MySecondVertice.java, die den Pfad "/ q2/" leitet. Der zweite Scheitelpunkt wird im ersten Scheitelpunkt bereitgestellt.Wie mehrere Vertices in Vert.x ausgeführt werden?
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());
}
});
}
}
Mein 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>
Ich führe es durch java -jar xxx-fat.jar
.
Wenn ich localhost: 8080/q1/xxx in den Browser eintippe, kann der gewünschte Inhalt zurückgegeben werden. Aber wenn ich versuche, localhost zu besuchen: 8080/q2/xxx, sagt es "Ressource nicht gefunden". Kannst du mir sagen, wie man zwei Verticles einsetzt, die unterschiedliche Wege leiten? Ich weiß, dass ich verschiedene Pathes in demselben Verticle routen kann, ich möchte nur wissen, wie man mehrere Vertices einsetzt und ausführt. Danke im Voraus!
scheint wie eine schlechte Design-Idee. Sie können mehrere Routen auf demselben Router mit verschiedenen Handlern haben.Sie benötigen wirklich nur einen Web-Service-Verticle, nicht zwei.Sie können den Vert.x-Parameter "-instanzen #" verwenden, um mehrere Verticles des gleichen Web-Server-Verticle zu starten, wenn Sie möchten die Last etwas verteilen – Quintium