我有一个有两条消息的参与者,第一个负责在mongoDB中插入数据,第二个参与者负责在elasticsearch、InserInMongo和Inserins中插入数据。也就是说,当mongoDB插入操作失败或ES插入操作因某些异常而失败时,会出现这种情况,我正在做类似的事情
try {
val mongoFuture: Future[Boolean] = ask(artGroupPersistenceActor, PersistArtGroupInMongo(artGroup)).mapTo[Boolean]
val esFuture: Future[Boolean] = ask(artGroupPersistenceActor, PersistArtGroupInES(artGroup)).mapTo[Boolean]
val resultMongo = Await.result(mongoFuture, timeout.duration)
log.debug("store: Record Inserted inserted in mongoDB {}", resultMongo)
val resultES = Await.result(esFuture, timeout.duration)
log.debug("store: Record Inserted in ES {}", resultES)
}
catch {
case e: Exception =>
log.error("store:While inserting an artgroup Exception in artGroupPersistenceActor actor", e)
throw e
}
在这里,我想如果mongoFuture失败,那么我抓住它的异常,它应该继续与esFuture
或者如果两个未来都失败了,我得到了两个例外,我如何存档这个场景?
如果您只想记录异常,只需对每个异常执行以下操作:
mongoFuture.failed.foreach {ex => logger.error("Mongo error", ex)}
您可以使用recovery
,它将处理原始Future包含的任何匹配的可抛出物:
val mongoFuture = ask(artGroupPersistenceActor, PersistArtGroupInMongo(artGroup))
.mapTo[Boolean]
.recover {
case e =>
println("error in mongo: " + e)
false
}
val esFuture = ask(artGroupPersistenceActor, PersistArtGroupInES(artGroup))
.mapTo[Boolean]
.recover {
case e =>
println("error in ES: " + e)
false
}
val f = Future.sequence(List(mongoFuture, esFuture))
val result: Seq[Boolean] = Await.result(f, Duration.Inf)
println(result)
你可以这样试试。
for {
x <- Future.successful {
try {
code here...
} catch {
case _: Exception =>
println("Error Inserting In Mongo ")
false
}
}
y <- Future.successful {
try {
code here...
// throw new IllegalStateException("Exception thrown")
} catch {
case _: IllegalStateException =>
println("Error Inserting In ES ")
false
}
}
} yield(x, y)
现在,如果在执行过程中发生错误,您可以进行操作..祝您好运。
我在一个Spray应用程序中使用ask模式调用一个Actor,并将结果作为HTTP响应返回。我将故障从参与者映射到自定义错误代码。 当authActor发送一个失败时,这可以正常工作,但是如果authActor抛出一个异常,则在请求超时完成之前什么也不会发生。例如: 这样,如果它是预期的错误(即ServiceException),则通过创建一个失败来处理它。如果它是意外的,它会立即返回一个失败,以
网上有不少关于这个错误的帖子。我的情况是,我有时可以建立连接,但大多数时候失败了。以下是失败时的错误: 以下是成功时的信息: 我没有很好的解释,为什么有时它能工作,而另一次却不能。在每次之前,Mate 9上启用了
上下文:我想编译和测试一个多模块项目中的所有模块,但如果任何一个失败,编译或测试,我希望整个构建失败。 默认配置要么在第一次失败时停止,要么在测试失败后跳过模块 跑步: 在第一个失败的模块处停止。 如果添加: mvn clean Install-FAE//结束时失败 null 响应非常感谢-否则,如果有多个问题,我们必须在构建服务器上重复运行测试-消耗大量时间。
2.2.显示日历后,程序必须询问用户是否要输入另一个日期(是否继续?) 2.3.用户必须用大小写字母的任意组合回答是、否、y或n 2.4.如果给出了无效的答案,则必须通知用户该答案不可接受,然后再次提示用户输入另一个答案。如果给出了三个以上连续的错误答案,程序必须以适当的错误消息终止 这是我目前所拥有的 如果年份是错误的,它会打印无效年份,但现在m坚持如何在结束程序之前再次询问3个领带/如果用户在
我正在调查 Postgres 数据库上经常执行的查询,以帮助减少 XID 的使用。我可以获取执行的查询列表以及使用调用次数,但它不包括由于唯一约束违规等原因而失败的查询。有没有办法记录并获取这些失败查询的计数? 例: 如图所示,如果INSERT查询总是失败,并且如果成功执行后查询已经存在,则调用计数不会因后续失败的查询而增加,即使失败的查询导致当前XID增加。
例如。 当我将类A作为Testng类执行时,得到以下输出 而期望的输出是