我正在开发一个程序,该程序将具有多个线程,这些线程需要来自可处理诸如以下请求的Web服务的信息:
“给我[Var1, Var2, Var3]
作为[Object1, Object2, ... Object20]
”
在这种情况下,得到的答复将为我提供20个节点的XML(每个对象一个),每个节点具有3个子节点(每个var一个)。
我的挑战是,对此Web服务提出的每个请求都要花费组织金钱,并且无论是1对象1 var还是20对象20 var,成本都是相同的。
因此,既然如此,我正在寻找一种架构,该架构将:
目前,我的想法是使用像NetMQ这样的库,中间层作为服务器,每个线程作为轮询器,但是我陷入了实际的实现过程中,并且在深入探讨之前,希望那里已经有一个设计模式/库,它比我想象的要有效得多。
请理解我是菜鸟,因此,非常感谢您的任何帮助/指导!!
谢谢!!!
最佳答案
概述
从体系结构的角度来看,您刚刚勾勒出解决该问题的好方法:
技术
您可能找不到符合您需求的现成产品或框架。但是,您可以使用几种框架/体系结构模式来构建解决方案。
C#:RX和LINQ
当您想使用C#时,可以使用reactive extensions来获取时间和正确的分组。
然后,您可以使用LINQ从请求中选择属性以构建响应,并在响应队列中选择与响应的某个部分匹配或超时的请求。
Scala/Java:Akka
您可以使用多个参与者将解决方案建模为参与者系统:
使用参与者系统可以轻松处理并发并以可测试的方式分离问题。
使用Scala时,您可以使用其“monadic”集合API(
filter
,map
和flatMap
)与在C#方法中使用LINQ基本上相同。当您要测试各个元素时,actor方法确实很出色。这很容易to test each actor individually,而不必模拟整个工作流程。
Erlang/Elixir: Actor 系统
这与Akka方法类似,只是使用了不同的(功能!)语言。 Erlang/Elixir对分布式actor系统提供了很多支持,因此当您需要超稳定或可扩展的解决方案时,应考虑使用这一解决方案。
NetMQ/ZeroMQ
这可能是太低的级别,并且几乎没有基础架构。使用actor系统时,可以尝试引入NetMQ/ZeroMQ作为传输系统。