具有持久性的 HTTP POST 请求的非阻塞队列
在我们开发自定义解决方案之前,我正在寻找某种库,它提供:
HTTP 请求的非阻塞队列
具有以下属性:
- 持久化请求以避免在以下情况下丢失请求:
- 网络连接中断
- 应用程序退出,强制后台应用程序上的 GC
- 等。。
- 提出所有这些字段的可能性:
- 地址
- 头
- 开机自检数据
所以拜托,有什么可用的东西吗,有什么可以节省我们一整天的时间来开发这个?
现在,我们不需要对已完成的请求进行任何回调,也不需要保存结果数据,因为不会有这样的回调。
在我们开发自定义解决方案之前,我正在寻找某种库,它提供:
HTTP 请求的非阻塞队列
具有以下属性:
所以拜托,有什么可用的东西吗,有什么可以节省我们一整天的时间来开发这个?
现在,我们不需要对已完成的请求进行任何回调,也不需要保存结果数据,因为不会有这样的回调。
在我看来,一个好的和直接的解决方案是开发自己的层(不应该那么复杂),使用复杂的连接处理框架,如Netty https://netty.io/,以及一个复杂的异步处理框架,如Akka http://akka.io/
让我们首先在 http://static.netty.io/3.5/guide/#architecture.8 看看Netty对http的支持:
4.3. HTTP 实现
HTTP绝对是互联网上最流行的协议。已经有许多HTTP实现,例如Servlet容器。那么,为什么Netty在其核心之上有HTTP呢?
Netty的HTTP支持与现有的HTTP库有很大不同。它使您可以完全控制 HTTP 消息在低级别上的交换方式。因为它基本上是HTTP编解码器和HTTP消息类的组合,所以没有强制线程模型等限制。也就是说,您可以编写自己的HTTP客户端或服务器,完全按照您想要的方式工作。您可以完全控制 HTTP 规范中的所有内容,包括线程模型、连接生命周期和分块编码。
现在让我们深入了解阿卡。Akka是一个框架,它在Java并发API之上提供了一个出色的抽象,并且它带有Java或Scala中的API。
一旦你熟悉了这两个框架,事实证明,你需要的东西可以很容易地通过它们进行编码。
事实上,你需要的是一个用Netty编码的http代理,在收到请求时,它会立即向使用持久邮箱(http://doc.akka.io/docs/akka/2.0.2/modules/durable-mailbox.html)的FSM(http://doc.akka.io/docs/akka/2.0.2/java/fsm.html)类型的Akka Actor发送消息。
这是一个开源图书馆的链接,这是布拉格捷克技术大学一名学生的硕士论文。它是一个非常大和强大的图书馆,主要关注位置。不过,关于它的好处是它省略了REST具有的标头和其他-ish。
这是最新的分叉,希望它至少能给你“自己的”解决方案的灵感。