我是新进入Vert. x的。我遵循了Vert. x文档和一些教程。但是我混淆了使用Vert. x实现非阻塞REST Web服务的正确方法是什么。我在Java中找到了这篇文章开发非阻塞Web应用程序,其中包含一个使用Vert. x实现非阻塞Web应用程序的示例。
此代码块包含向另一个Vertical(“todoService”:TodoServiceVerticle)发送消息。
JsonObject command = new JsonObject();
command.putString("action","findOne").
putNumber("id",Long.valueOf(request.params().get("id")));
String address = "todoService";
vertx.eventBus().send(address, command, (Message<JsonObject> message)-> {
JsonObject item = message.body();
String payload = item.encode();
request.response()
.putHeader("content-type", "application/json")
.end(item);
});
这是“todoService”:TodoServiceVer的垂直。
public class TodoServiceVerticle extends Verticle{
/** Initializes the verticle at the start-up */
@Override public void start() {
// Initialize the verticle
vertx.eventBus().registerHandler("todoService", this::onMessage);
}
private void onMessage(Message<JsonObject> message) {
JsonObject command = message.body();
// Only "findOne" is supported in this example
assert ("findOne".equals(command.getString("action")));
Long id = command.getLong("id");
Todo item = findOneById(id);
JsonObject payload = toJson(item);
message.reply(payload);
}
}
在这个例子中,服务器运行在一个线程上。所有的http请求都到达同一个线程。TodoServiceVerticle正在不同的线程中运行。
现在我的问题是如果TodoServiceVerticle。onMessage()函数包含耗时的任务(例如:-DB Operation、Reading a Large File…),它将阻止进程。同时假设另一个用户调用TodoServiceVerticle。onMessage(),但他还必须等待上一个用户完成任务。那么如何避免这种问题。谢谢。
请看这个博客系列:
Java Future对象用于获取由并行线程(执行器)执行的异步计算的结果。我们调用Future.get()方法并等待结果就绪。此示例显示了一种从Future检索结果的非阻塞方式。java实现java非阻塞未来。 在本例中,在并行执行完成后调用onSuccess()方法。问题在于onSuccess()方法未在主线程上运行。我想在主线程上执行onSuccess()方法。我怎样才能解决这个问题。谢谢
现在我们已经知道了Java NIO里面那些非阻塞特性是怎么工作的,但是要设计一个非阻塞的服务仍旧比较困难。非阻塞IO相对传统的阻塞IO给开发者带来了更多的挑战。在本节非阻塞服务的讲解中,我们一起来讨论这些会面临的主要挑战,同时也会给出一些潜在的解决方案。 查找关于设计非阻塞服务的相关资料是比较难的,本文提出的解决方案也只能是基于笔者个人的工作经验,构思。如果你有其他的解决方案或者是更好的点子,那么
本文向大家介绍轻松创建nodejs服务器(8):非阻塞是如何实现的,包括了轻松创建nodejs服务器(8):非阻塞是如何实现的的使用技巧和注意事项,需要的朋友参考一下 这节我们来了解一下nodejs实现非阻塞操作的方法。 我们先来修改一下 start的处理程序: 这段代码,创建了一个新的变量content(初始值为“empty”),执行“ls -lah”命令,将结果赋值给content,最后将co
我有一个使用Spring Boot设计的RestFul Webservice。 web服务相当繁重,因为它必须在启动时进行大量的数据库调用,并且有些端到其他端进行大量的IO操作来提供结果。 我想让Restful Api成为异步的,这样它就可以更有伸缩性,而且它花时间来提供它的结果。 我甚至实现了这一点,但我无法测试这是否是异步的。 如果我想要 如果向url/all发出请求
主要内容:1 非阻塞服务器-GitHub仓库,2 无阻塞IO管道,3 非阻塞与阻塞IO管道,4 基本的无阻塞IO管道设计,5 读取部分消息,6 存储部分消息,7 编写部分消息,8 总结,9 服务器线程模型即使你了解了Java NIO非阻塞功能如何工作(Selector,Channel, Buffer等),设计一个无阻塞服务器仍然很难。与阻塞IO相比,非阻塞IO包含多个挑战。这份非阻塞服务器教程将讨论非阻塞服务器的主要挑战,并为它们描述一些潜在的解决方案。 本教程中描述的思想是围绕Java NIO
我正在研究反应式编程,我怀疑它是否是非阻塞IO的Java REST web服务的实现。Java Servlet 3.1规范引入了一些接口,以实现非阻塞web请求。 我的问题是: Netty是否实现了该规范,而Tomcat、JBoss和Jetty没有实现 谢谢。