带Scala的HTTP消息网关
我正在开发一个网关,它将位于移动web应用程序和后端系统上的web服务之间。此网关的目的是保护web应用程序不受后端web服务api更改的影响,以引入并发性、转换消息、缓冲等 我提议的架构如下:带Scala的HTTP消息网关,scala,architecture,lift,playframework-2.0,finagle,Scala,Architecture,Lift,Playframework 2.0,Finagle,我正在开发一个网关,它将位于移动web应用程序和后端系统上的web服务之间。此网关的目的是保护web应用程序不受后端web服务api更改的影响,以引入并发性、转换消息、缓冲等 我提议的架构如下: 使用PhoneGap的独立于平台的移动web应用(完成) 网关是一种web服务,使用Scala进行业务逻辑,使用ZeroMQ进行消息传递(新) 后端是现有的web服务(现有) 网关完全负责消息的传递、翻译、聚合等,此时不需要保持状态或进行用户身份验证——它只是负责作为一个界面,知道如何与一方的移动应
- 使用PhoneGap的独立于平台的移动web应用(完成)
- 网关是一种web服务,使用Scala进行业务逻辑,使用ZeroMQ进行消息传递(新)
- 后端是现有的web服务(现有)
感谢下面所有可能的答案。我看了每一个建议,它们都有优点。现在的问题是赌对马。喷雾可能是解决这个问题最简单的方法,但我也发现了。这似乎是解决我问题的绝妙办法。我有点担心它是建在Netty而不是Akka之上的。有人认为这有什么问题吗。我希望我的解决方案尽可能保持纯Scala,但欺骗似乎是最成熟的。有什么想法吗?值得一看,它为在JVM上编写并发、容错应用程序以及编写web服务提供了一个轻量级框架。此外,该项目看起来对您的目的很有用,在Akka之上提供HTTP服务器和客户端库(尽管与Akka本身不同,我没有使用过它,所以我自己也不能保证它的正确性)。它可能值得一看,它为编写并发代码提供了一个轻量级框架,JVM上的容错应用程序,以及编写web服务。此外,该项目看起来对您的目的很有用,在Akka之上提供HTTP服务器和客户端库(尽管与Akka本身不同,我没有使用它,所以我自己也不能担保)。正如mistertim所说,Akka是一个不错的选择。我有偏见,但我认为Lift和它也是一种很棒的方式(我已经用Lift为iPhone应用程序构建了几个API)。除此之外,我还认识一些非常满意的人。正如mistertim所说,Akka是一个不错的选择。我有偏见,但我认为Lift和它也是一种很棒的方式(我已经用Lift为iPhone应用程序构建了几个API)。除此之外,我还认识一些非常满意的人。如果您想保持它的轻量级,而不是一个成熟的web框架,那么unfilted是一个非常有趣的选择 老实说,文档可以使用更多细节,但要提供web服务,您只需编写:
object MyService extends unfiltered.filter.Plan {
def intent = {
case req @ GET(Path ("/myendpoint")& Params(params)) =>
for {
param1<-params("param1")
param2<-params("param2")
} yield ResponseString(yourMethod(param1,param2))
}
override def main(args:Array[String]) = unfiltered.jetty.Http.anylocal.filter(MyService).run();
}
object MyService扩展unfilted.filter.Plan{
定义意图={
case-req@GET(Path(“/myendpoint”)&Params(Params))=>
对于{
param1Unfiltered是一个非常有趣的选项,如果您想保持它的轻量级,因为它不是一个成熟的web框架
老实说,文档可以使用更多细节,但要提供web服务,您只需编写:
object MyService extends unfiltered.filter.Plan {
def intent = {
case req @ GET(Path ("/myendpoint")& Params(params)) =>
for {
param1<-params("param1")
param2<-params("param2")
} yield ResponseString(yourMethod(param1,param2))
}
override def main(args:Array[String]) = unfiltered.jetty.Http.anylocal.filter(MyService).run();
}
object MyService扩展unfilted.filter.Plan{
定义意图={
case-req@GET(Path(“/myendpoint”)&Params(Params))=>
对于{
param1如果您使用的web服务纯粹用于其他服务,那么基于Akka的服务(如Spray或Blueeyes)可能是您最好的选择。您可以使用Jerkson在case类之间进行JSON映射,并使用Akka Camel链接到ZeroMQ。如果您使用的web服务纯粹用于其他服务,那么Akka ba像Spray或Blueeyes这样的sed服务可能是你最好的选择。你可以使用Jerkson在你的case类之间进行JSON映射,并使用Akka Camel链接到ZeroMQ。如果你的系统是中间件并且能够快速完成任务,那么这将是最好的选择。Spray是在上面开发的。Akka具有ZeroMQ支持
在将来,如果您打算在中间件中添加一些其他类似web的模块,那么选择+Akka会更好,因为Lift还提供类似于Spray的web服务