我可以从任意异步任务访问 Http.Context.current() 吗?

2024-03-28

我正在开发一个移动应用程序的后端,该应用程序当前在 Play 2.1.1 上运行。作为处理某些请求的一部分,我们会发送推送通知。发送推送通知的下游请求应该完全异步,并且与移动客户端的原始请求响应分离。

我想访问Http.Context.current()发送下游请求以访问我们在请求标头中传递的一些跟踪信息。

最初,代码看起来像这样,遵循中的建议玩!文档 http://www.playframework.com/documentation/2.1.0/JavaAkka:

PushNotificationRunnable sendNotificationTask = new ...    
Akka.system().scheduler().scheduleOnce(Duration.apply(0, TimeUnit.MICROSECONDS),
    sendNotificationTask, Akka.system().dispatcher());

探索play.libs.Akkahelper 引导我找到 future 方法,该方法接受一个可调用对象并返回一个 Promise。这个承诺允许我链接更多代码。在这里我链接了一个Callback which 可以访问 Http.Context.current()感谢设置代码Play's PromiseActor class https://github.com/playframework/playframework/blob/2.1.1/framework/src/play/src/main/java/play/libs/F.java#L412。这允许我在任务完成时记录一行,包括跟踪 ID,但在任务期间我的日志行仍然无法访问跟踪信息。

PushNotificationCallable sendNotificationTask = new ...
Akka.future(sendNotificationTask).onRedeem(new F.Callback<Void>() {
    @Override
    public void invoke(Void aVoid) throws Throwable {
        Logger.info("Completed sendNotificationTask from the service");
    }
});

以下是一些简短的应用程序日志,用于显示我当前所在的位置以及缺少的内容,跟踪 ID 在第五列中:

2013-07-26 11:31:06,885 DEBUG play-akka.actor.default-dispatcher-10 -2454018518484259555 [application] : Processing request for mobile app
2013-07-26 11:31:06,907 DEBUG play-akka.actor.default-dispatcher-10 -2454018518484259555     [application] : About to schedule push notification message send
2013-07-26 11:31:06,907 INFO  application-akka.actor.default-dispatcher-8 n/a [services.PushMessageSenderTask] : Sending message in akka background task
2013-07-26 11:31:06,924 INFO  application-akka.actor.default-dispatcher-8 n/a [services.PushMessageSenderTask] : Sent message in akka background task
2013-07-26 11:31:06,925 INFO  play-akka.actor.default-dispatcher-16 -2454018518484259555 [application] : Completed sendNotificationTask

这些字段是日期、时间、级别、线程和跟踪 ID。使用此 logback 配置(如果有帮助):

%d{ISO8601} %-5level %thread %traceId [%logger] : %msg%n

可以看到,第3行和第4行来自Akka线程,无权访问TraceId,而是打印n/a。第 1 行和第 2 行位于初始请求处理线程上,并且具有访问权限。最后,第 5 行位于不同的请求处理线程上并且也具有访问权限。

是否有某种不同的方式可以安排任务,使其能够访问 Http.Context.request(),但仍会在浏览器的请求响应循环“外部”运行它?


None

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

我可以从任意异步任务访问 Http.Context.current() 吗? 的相关文章

随机推荐

  • 如何使用批处理文件运行R语言(.r)文件?

    我想使用批处理文件运行 R 脚本文件 r 如果 R exe 在您的 PATH 中 那么您的 Windows 批处理文件 bat 将仅包含一行 R CMD BATCH your r script R 否则 您需要给出 R exe 的路径 例如
  • 为什么 Numba 的“急切编译”会减慢执行速度

    附上一个最小的例子 from numba import jit import numba as nb import numpy as np jit nb float64 nb int32 def go fast a trace 0 0 fo
  • jQuery DataTables 多选列过滤器

    我想要得到的是类似于 Excel 的针对各个 DataTables 列的多条件过滤 我在 stackoverflow 上遇到了一些与该主题相关的主题 但这些主题似乎都没有实现我正在寻找的内容 到目前为止 我只有样本表 我很感激任何有关下一步
  • NGINX 反向代理:许多 html 状态代码 400 响应,为什么?

    我们最近实现了一个基于 nginx 的反向代理 在调试访问日志时 我们看到大量状态代码 400 结果 它们看起来像这样 07 Sep 2011 05 49 04 0700 400 0 我们启用了调试错误日志记录 它们通常对应于这样的内容 2
  • 使用 IHttpHandler 时 Firefox 无法正确处理内容类型

    由于某种原因 Firefox 无法正确处理通过我的 NET HTTP 处理程序发送的内容 它似乎不遵守内容类型标头 相反 它将内容视为 HTML 映射到请求的 URL 甚至具有 csv 扩展名 Internet Explorer 和 Chr
  • Debian:使用 bash 找出 CPU 使用情况

    我正在使用 PHP 来读取当前的 CPU 使用情况 我在虚拟服务器上 因此启用了 shell exec 我努力了grep on ps 但没有成功 如何使用 bash 读取当前的 CPU 使用率百分比 最简单的方法就是使用sys getloa
  • 我们如何使用 JPA2 (Hibernate) 实体作为两个 Web 应用程序之间的 DTO?

    我们在 Glassfish 3 0 1 上运行并使用 Hibernate 3 5 3 我们的项目设置如下所示 前端战争 公共jar 后端战争 我们希望将 jpa2 带注释的实体放入 common jar 中 以便后端将它们视为 JPA2 实
  • 如何提高轮廓精度?

    我正在做一个使用 OpenCV 的项目 我需要从高清照片中精确地裁剪出一些物体 我使用四边形树将照片切成碎片 然后计算每个四边形的同质性以确定物体的一部分是否在四边形中 我根据四边形的同质性应用了一些具有不同阈值的 Canny 滤波器 我希
  • 何时使用 __() 和 esc_html_e?

    谁能解释一下为什么我会使用 https developer wordpress org reference functions over esc html e https codex wordpress org Function Refer
  • Vim Supertab 插件在导航完成菜单时反转方向

    当我通过 supertab 循环浏览完成选项列表时 即通过按
  • Android 启动画面不显示

    我的应用程序中的启动屏幕不显示 仅显示白色背景 然后它进入下一页 我在 stackoverflow 中看到了其他类似的问题 但它对我没有帮助 飞溅 xml
  • emberjs 和 Foundation4

    我正在尝试使用 emberjs 和 Foundation 4 现在使用 zepto 框架 但一旦我将 emberjs 添加到我的 application js 中 基础代码就停止工作 包含的顺序有问题吗 require jquery req
  • Task.Run 在同一线程上继续,导致死锁

    考虑以下我将同步等待的异步方法 等一下 我知道 我知道这被认为是不好的做法导致死锁 https blog stephencleary com 2012 07 dont block on async code html 但我完全有意识的 ht
  • @Autowired 不在内部类中工作

    我在内部类中有一个类是 Autowired 但是在执行时它会抛出空指针异常 而在外部类中自动装配时它工作正常 class outer class inner Autowired private var somevar private pro
  • Matlab:提取矩阵的第N个元素,同时保持矩阵的原始顺序

    我正在尝试设置一些代码来提取矩阵的某些元素 并按照提取的顺序仅将这些值保留在另一个矩阵中 示例 如果我有一个随机 1X20 矩阵 但只想要以 4 和 5 开头的每个 Nth 5 个元素 我希望它构造一个仅包含 4 5 9 10 14 15
  • AppClassloader 和 SystemClassloader 之间的区别

    我对这两个类加载器很困惑 当谈论Java类加载器的层次结构时 通常会提到引导类加载器和扩展类加载器以及第三类加载器 系统类加载器或应用程序类加载器 为了更准确 我查了JDK的源码 在班上Launcher 有代码 loader AppClas
  • D3.js(威尔金森型)点图示例

    我已经搜索过 但无法找到 D3 中点图的示例 有谁知道这种类型的绘图已在任何基于 D3 构建的图表库中实现 或者在基础 D3 中的示例 需要明确的是 点图与直方图类似 只不过点彼此堆叠在一起 而不是直方图的条形图 在 R 中 可以使用 gg
  • 如何使用 Homebrew 将 Postgis 安装到 [email protected] 的 Keg 安装中?

    我已经安装了 电子邮件受保护 cdn cgi l email protection使用 Homebrew 1 2 到我的 OSX El Capitan 机器 不幸的是 在安装 Postgis 并执行 CREATE EXTENSION pos
  • 在 Java 中将二进制数据从 URL 复制到文件,无需中间复制

    我正在更新一些旧代码 以从 URL 而不是从数据库获取一些二进制数据 数据即将从数据库中移出 并且可以通过 HTTP 访问 数据库 API 似乎直接以原始字节数组形式提供数据 并且相关代码使用 BufferedOutputStream 将此
  • 我可以从任意异步任务访问 Http.Context.current() 吗?

    我正在开发一个移动应用程序的后端 该应用程序当前在 Play 2 1 1 上运行 作为处理某些请求的一部分 我们会发送推送通知 发送推送通知的下游请求应该完全异步 并且与移动客户端的原始请求响应分离 我想访问Http Context cur