当前位置: 首页 > 知识库问答 >
问题:

如何将Akka.NET流与AspNet core或giraffe集成

丘普松
2023-03-14

当我通常使用Giraffe或ASP.NET Core时,我可以创建一个actor系统,将其作为服务添加,然后在请求处理程序选择任何actor并询问/告知消息的情况下获得它。

无论是使用cluster.sharding还是普通的user/actor,我知道它将是整个系统中actor的一个实例,处理多个消息。

如何与流进行相同的通信?它们似乎不是路由器中的引用,也不是作为执行元路径的执行元系统中的引用:执行元引用、路径和地址。

这是不是应该有不同的做法呢?

复制IO部分,我可以物化一个图来处理每个请求,但通常我会与“单例”通信,比如域驱动设计聚合根来处理域逻辑(这就是为什么要使用分片模块),我不确定如何在请求处理程序中执行新物化的图中使用的单例接收器,因为所有请求必须只有一个接收器。

共有1个答案

姚新霁
2023-03-14

有很多方法可以将akka流与外部系统集成在一起。使其易于接收的是source.queue(有点类似于system.threading.channels,并早于它们)。您可以在初始化点实现流,然后在Giraffe DI中注册队列endpoint--这样,您就不必为每个请求都进行相同的流初始化付出代价:

open Akka.Streams
open Akkling
open Akkling.Streams
open FSharp.Control.Tasks.Builders

let run () = task {
    use sys = System.create "sys" <| Configuration.defaultConfig()
    use mat = sys.Materializer()
    
    // construct a stream with async queue on both ends with buffer for 10 elements
    let sender, receiver =
        Source.queue OverflowStrategy.Backpressure 10
        |> Source.map (fun x -> x * x)
        |> Source.toMat (Sink.queue) Keep.both
        |> Graph.run mat
        
    // send data to a queue - quite often result could be just ignored
    match! sender.OfferAsync 2 with
    | :? QueueOfferResult.Enqueued -> () // successfull
    | :? QueueOfferResult.Dropped -> () // doesn't happen in OverflowStrategy.Backpressure 
    | :? QueueOfferResult.QueueClosed -> () // queue has been already closed
    | :? QueueOfferResult.Failure as f -> eprintfn "Unexpected failure: %O" f.Cause
    
    // try to receive data from the queue
    match! receiver.AsyncPull() with
    | Some data -> printfn "Received: %i" data
    | None -> printfn "Stream has been prematurelly closed"
        
    // asynchronously close the queue
    sender.Complete()
    do! sender.WatchCompletionAsync()
}
 类似资料:
  • Akka.NET 是 Akka 的 .NET 开源实现。用于构建强大的并发和分布式应用。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。 示例代码: using System;using System.Collections.Generic;using System.Linq;using System.Text;usi

  • Giraffe 是 iPhone 的编码动画 GIF 文件,使用的 GIF 编码库是 ANGif(UIImagePixelSource.m 和 ExportViewController.m 文件 ) ANGif 示例 ANGifEncoder * encoder = [[ANGifEncoder alloc] initWithOutputFile:@"myFile.gif" size:CGSize

  • 目前,我的应用程序使用SpringMVC进行所有控制器映射。我正在尝试实现一个tinyMCE拼写检查,它包括一个Servlet,我不确定如何在不修改该文件本身的情况下正确集成该Servlet。我想避免修改,这样如果我们以后有新版本,我们就可以了。 Servlet看起来像...

  • 问题内容: 有人知道将soapUI测试添加到我的CI版本的好方法吗? 问题答案: soapUI通过Maven或Ant提供测试自动化。在这里描述了Maven集成。 我在一个月前尝试过,但是在eviware存储库中遇到了一些奇怪的问题…因此,我现在通过Ant运行测试。您要做的是在soapUI bin目录中调用(或)脚本。您可以在此处找到可用的参数。 您必须在Hudson构建服务器上安装soapUI。然

  • 问题内容: 我正在寻找有关symfony2中有关ajax的简单教程/示例,供初学者使用? 我有这些例子: city.php:http://pastebin.com/Qm8LS5kh ajax_req.js:http://pastebin.com/UqJMad24 index.html:http://pastebin.com/H1err4Yh 如何将它们放入Symfony2应用程序中? 问题答案:

  • 当我在插件和“测试连接”中配置SonarQube服务器时,我正在尝试使用Intellij运行Solar Lint 我一直收到以下错误消息: 以下插件不符合要求的最低版本,请升级:java(安装:3.7,最低:3.8) 我不完全明白这意味着什么,我真的很感激在这方面的任何帮助。 P、 我无法升级sonar服务器上的Java插件,如果这是这个问题的唯一解决方案,因为我无法访问服务器管理功能。