akka-http 具有多种路由配置

2024-03-07

快速背景

我正在通过一些示例学习 Akka HTTP 堆栈来创建新的 REST 项目(完全非 UI)。我一直在使用和增强Akka HTTP 微服务示例 http://www.typesafe.com/activator/template/akka-http-microservice完成了一系列用例和配置,并对 Scala 和 Akka HTTP 的工作效果感到惊喜。

当前设置

目前我有这样的配置:

object AkkaHttpMicroservice extends App with Service {
  override implicit val system = ActorSystem()
  override implicit val executor = system.dispatcher
  override implicit val materializer = ActorMaterializer()

  override val config = ConfigFactory.load()
  override val logger = Logging(system, getClass)

  Http().bindAndHandle(routes, config.getString("http.interface"), config.getInt("http.port"))
}

The routes参数只是一个简单的值,其中包含使用的典型数据path, pathPrefix, etc.

问题

有什么方法可以在多个 Scala 文件中设置路由或在某个地方提供示例吗?

我真的希望能够定义一组类来分隔关注点并处理 Actor 设置和处理,以处理应用程序的不同区域,并将封送处理留给根App扩大。

这可能是我对如何使用 Java 中的注释进行操作思考太多@javax.ws.rs.Path("/whatever")在我的课堂上。如果是这样,请随时指出心态的变化。

我尝试搜索几组不同的关键字,但相信我问了错误的问题(例如,, ).


问题 1 - 合并多个文件中的路由

您可以非常轻松地组合来自多个文件的路线。

FooRouter.scala

object FooRouter {
   val route = path("foo") {
       complete {
          Ok -> "foo"
       } 
   }       
}

BarRouter.scala

object BarRouter {
   val route = path("bar") {
       complete {
          Ok -> "bar"
       } 
   }       
}

主路由器.scala

import FooRouter
import BarRouter
import akka.http.scaladsl.server.Directives._
import ...

object MainRouter {
   val routes = FooRouter.route ~ BarRouter.route
}

object AkkaHttpMicroservice extends App with Service {
  ...    
  Http().bindAndHandle(MainRouter.routes, config.getString("http.interface"), config.getInt("http.port"))
}

这里有一些文档:

  • http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/overview.html http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/overview.html
  • http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/routes.html http://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/routes.html

问题 2 - 单独的路由、编组等

是的,您可以分离路由、编组和应用程序逻辑。这里有激活器示例:https://github.com/theiterators/reactive-microservices https://github.com/theiterators/reactive-microservices

问题 3 - 使用注释处理路由

我不知道有什么库允许您使用注释来定义 akka-http 中的路由。尝试了解有关 DSL 路由的更多信息。这代表了一种不同的 http 路由方法,但它也是方便的工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

akka-http 具有多种路由配置 的相关文章

随机推荐

  • Wordpress 存储用户身份验证数据的方式背后有哪些细节?

    首先 让我定义最终目标 我想要 Wordpress 版本 2 8 来管理网站的身份验证数据 凭据和访问控制 该网站的大部分内容将使用 WordPress 但某些页面将在 Wordpress 环境之外构建 这些页面应该能够使用Wordpres
  • 模板中的 const_cast。有 unconst 修饰符吗?

    我有一个这样的模板类 template
  • 在 JavaScript 的 Promises 中捕获 Promises 中生成的错误

    Promise 中是否可能出现错误 请参阅下面的代码以供参考 我想得到promise1 catch捕获中生成的错误promise2 当前不适用于此代码 function test var promise1 new Promise funct
  • 使用 Arrays.sort() 对并行数组进行排序

    是否可以使用对数组进行排序Arrays sort 然后将另一个相关数组放置在与排序数组相同的位置 例如 String arrNames new String 5 String arrCellNo new String arrNames le
  • SQL:连接表后 SUM() 函数返回错误值

    我目前正在开发一个数据库项目 并且在连接表方面遇到一些问题 初始情况是 四张桌子 任务 t 50000 条记录 项目 p 1000 条记录 Workson w 30000 条记录 员工 e 10000 条记录 表 w 有一个名为 WORKL
  • 将元素添加到节点(如果不存在)

    使用 xslt 3 我尝试插入元素 PROPERTY 如果每个 RECORD 节点尚不存在 table table
  • 缓存和记忆化有什么区别?

    我想知道之间的实际区别是什么caching and memoization is 在我看来 两者都涉及避免通过存储数据来重复调用函数来获取数据 两者的核心区别是什么 记忆化是一种特定形式的缓存 涉及根据函数的参数缓存函数的返回值 缓存是一个
  • 如果IE 6,我想产生警告并免费下载其他浏览器图标

    我的网站想打开IE7及以上版本 如果是IE 6 我想产生警告并免费下载其他浏览器图标 这可能吗 您可以获得一些不需要服务器端脚本的示例ie6nomore com http www ie6nomore com code samples htm
  • Objective-C:在 SpriteKit 中向计时器添加 10 秒

    我使用了别人的代码在 SpriteKit 中编写计时器 并对其进行了一些调整 我的代码如下所示 void createTimerWithDuration NSInteger seconds position CGPoint position
  • 如何用OPENCV得到最小外接圆?

    我在用着cv minEnclosingCircle 为了得到精确地演变我的轮廓的最小圆 但我得到了一个更大的圆 换句话说 我正在尝试得到这样的东西 https upload wikimedia org wikipedia commons t
  • ClassLoader getResourceAsStream 返回 null

    我的项目目录结构 在Eclipse中 MyProject src gt source directory on Eclipse s classpath buildpath com me myapp Driver myconfig txt I
  • Django - 将参数传递给内联表单集

    我在用inlineformset factory使用中介考勤模型为客户端和会话之间的多对多关系创建字段 我的视图文件中有以下内容 AttendanceFormset inlineformset factory Session Attenda
  • Canvas.drawText() 不会在 Android 上呈现大表情符号

    Canvas drawText 不渲染表情符号在 Android 上超过一定的字体大小 Correct render at somewhere below 256 px Incorrect render at above 256 px 有一
  • 如何从 MVC/Razor 页面将参数传递到顶级服务器端 blazor 组件?

    将 Blazor 组件添加到现有 MVC 或 Razor 页面时 能够将参数传递到 Blazor 组件中非常有用 例如将 MVC 页面的 URL 中的参数 例如 ID 传递到组件上 直到 Core 3 Preview 9 服务器渲染组件才可
  • 快速添加按钮到SCNNode

    我正在研究 ARKit 和图像检测 现在我有一个应用程序可以检测图像并将平面放置在屏幕上检测到的对象所在的位置 如何添加可点击的元素 例如飞机上的按钮 我想在每个检测到的对象上都有一个单击事件 这就是我的渲染器函数的样子 func rend
  • ASP.NET MVC 2:查看子文件夹?

    在我看来 当我使用视图和控制器时 控制器仅处理各自文件夹的第一级 Controllers MembersController Views Members 控制器应该如何处理子文件夹 Views Members Business 控制器isn
  • Mono 中的 P/Invoke

    什么是当前状态 of Mono http www mono project com 的平台调用实现Linux and on Solaris 工作 可用且稳定 它经过了充分的测试 因为相当多的 mono 自己的低级功能必须通过它编组到底层操作
  • 为什么日期之间的减法会返回 Rational 类型?

    我正在尝试对日期执行减法运算 date sent Date parse 2013 01 01 gt Tue 01 Jan 2013 date now Date today gt Wed 04 Sep 2013 days date now d
  • PHP 中的 undefined 相当于什么?

    我的假设随后是基于假设的问题 JavaScript 有null and undefined 您可以将变量设置为null 表示它没有值 或者您可以将其设置为undefined 这意味着不知道它是否有值 它只是根本没有设置 PHP has nu
  • akka-http 具有多种路由配置

    快速背景 我正在通过一些示例学习 Akka HTTP 堆栈来创建新的 REST 项目 完全非 UI 我一直在使用和增强Akka HTTP 微服务示例 http www typesafe com activator template akka