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

Mar*_*era 13 java android asynchronous message-queue

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

HTTP请求的非阻塞队列

具有以下属性:

  • 在下列情况下坚持要求避免损失:
    • 网络连接中断
    • 应用程序退出,在后台应用程序上强制GC
    • 等等..
  • 推出所有这些领域的可能性:
    • 地址
    • 发布数据

那么请问,有什么可以正确知道的,有什么可以节省我们整天开发这个?

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

Edm*_*984 5

在我看来,一个好的和直接的解决方案是使用复杂的连接处理框架(如Netty https://netty.io/)和复杂的开发层(不应该这么复杂)异步处理框架,如Akka http://akka.io/

让我们首先在http:http ://static.netty.io/3.5/guide/#architecture.8中查看Netty对http的支持:

4.3.HTTP实现

HTTP绝对是Internet上最受欢迎的协议.已经有许多HTTP实现,例如Servlet容器.那为什么Netty在其核心上拥有HTTP呢?

Netty的HTTP支持与现有的HTTP库非常不同.它使您可以完全控制HTTP消息在低级别的交换方式.因为它基本上是HTTP编解码器和HTTP消息类的组合,所以没有限制,例如强制线程模型.也就是说,您可以编写自己的HTTP客户端或服务器,它们可以按照您想要的方式工作.您可以完全控制HTTP规范中的所有内容,包括线程模型,连接生命周期和分块编码.

现在我们来挖掘阿卡吧.Akka是一个框架,它在Java并发API的顶部提供了一个很好的抽象,它带有Java或Scala的API.

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

一旦熟悉了这两个框架,就会发现您需要的内容可以通过它们轻松编码.

事实上,你需要的是一个在Netty中编码的http代理,根据请求,接收器会立即向FSM类型的Akka Actor发送消息(http://doc.akka.io/docs/akka/2.0.2/java /fsm.html)使用持久邮箱(http://doc.akka.io/docs/akka/2.0.2/modules/durable-mailbox.html)