我有一个设计用于akka-io acking的Actor, 这样它会在向上游发送消息时等待Ack(到 网络)。这个actor是异步应用程序的接口 后端。
我希望有一个包装层,允许我转换它
演员成为akka-streams Flow[Incoming, Outgoing, ???]
所以
它可以与期望这样的新库集成
签名。
(来自上游的来信很少见,所以我们也不在乎 很多关于那里的背压,但它不会是一件坏事 拥有它。)
sealed trait Incoming //... with implementations
sealed trait Outgoing //... with implementations
object Ack
// `upstream` is an akka-io connection actor that will send Ack
// when it writes an Outgoing message to the socket
class SimpleActor(upstream: Actor) extends Actor {
def receive = {
case in: Incoming if sender() == upstream =>
// does some work in response to upstream
case other =>
// does some work in response to downstream
// including sending messages to upstream and
// `becoming` a stashing state waiting for Ack
// to `unbecome`, then sending Ack downstream
// (which will respect the backpressure).
}
}
我从akka-user邮件列表中获得了良好的权限 akka-stream中没有与actor集成的代码 流,并将Actor插入流并保存 基于Ack的背压,必须实施 PushPullStage
似乎我们在这里实际需要两个PushPullStage
...一个
upstream => SimpleActor
为SimpleActor => upstream
,PushPullStage
。
我的问题是:
{% block javascripts %}
<script type="text/javascript" src="http://kylemitofsky.com/libraries/libraries/bootstrap-datepicker.js"> </script>
<script type="text/javascript">
var nowTemp = new Date();
var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);
var checkin = $('#from').datepicker({
onRender: function(date) {
return date.valueOf() < now.valueOf() ? 'disabled' : '';
}
}).on('changeDate', function(ev) {
if (ev.date.valueOf() > checkout.date.valueOf()) {
var newDate = new Date(ev.date)
newDate.setDate(newDate.getDate() + 1);
checkout.setValue(newDate);
}
checkin.hide();
$('#to')[0].focus();
}).data('datepicker');
var checkout = $('#to').datepicker({
onRender: function(date) {
return date.valueOf() <= checkin.date.valueOf() ? 'disabled' : '';
}
}).on('changeDate', function(ev) {
checkout.hide();
}).data('datepicker');
</script>
{% endblock %}
更简单的方法呢?答案 0 :(得分:5)
我认为akka-stream的理念是提供低级别的砖块并在它们之上构建更高级别的工具。 如果你看一下我们最近发布的开源库https://github.com/MfgLabs/akka-stream-extensions,你会发现我们已经完全做到了。我们提供了一些有用的结构,以便更容易管理速率限制器,有状态处理器,懒惰和放大器。发电机等...... 对于actor集成,我认为应该可以创建某种帮助程序,以便更容易将actor与akka-stream集成,以尝试传播背压。 Akka-Stream还很年轻,生态系统不断发展;)
答案 1 :(得分:1)
是的,您可以将actor与流集成 为此目的有特殊的角色:演员出版商和演员订阅者。
一切都在这里:http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0-RC3/scala/stream-integrations.html
当然你必须以这样的方式写演员,它与流背压一起工作。但是你不需要推拉阶段。