具有持久性的 HTTP POST 请求的非阻塞队列

2022-09-04 03:53:17

在我们开发自定义解决方案之前,我正在寻找某种库,它提供:

HTTP 请求的非阻塞队列

具有以下属性:

  • 持久化请求以避免在以下情况下丢失请求:
    • 网络连接中断
    • 应用程序退出,强制后台应用程序上的 GC
    • 等。。
  • 提出所有这些字段的可能性:
    • 地址
    • 开机自检数据

所以拜托,有什么可用的东西吗,有什么可以节省我们一整天的时间来开发这个?

现在,我们不需要对已完成的请求进行任何回调,也不需要保存结果数据,因为不会有这样的回调。


答案 1

在我看来,一个好的和直接的解决方案是开发自己的层(不应该那么复杂),使用复杂的连接处理框架,如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。

  • 它为您提供了一种将应用程序构建为执行组件层次结构的清晰方法:
    • Actor通过消息传递进行通信,使用不可变消息,这样您就不必关心线程安全
    • Actor消息存储在消息框中,消息框可以是持久的
    • 演员负责监督他们的孩子
    • Actor可以在一个或多个JVM上运行,并可以使用多种协议进行通信
  • 它为异步处理提供了一个轻量级的抽象,Future,它比Java Futures更容易使用。
  • 它提供了其他花哨的东西,如事件总线,ZeroMQ适配器,远程处理支持,数据流并发,调度程序

一旦你熟悉了这两个框架,事实证明,你需要的东西可以很容易地通过它们进行编码。

事实上,你需要的是一个用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发送消息。


答案 2

这是一个开源图书馆的链接,这是布拉格捷克技术大学一名学生的硕士论文。它是一个非常大和强大的图书馆,主要关注位置。不过,关于它的好处是它省略了REST具有的标头和其他-ish。

这是最新的分叉,希望它至少能给你“自己的”解决方案的灵感。


推荐