【问题标题】:How to set construction fields or configuration loading in akka actor?如何在 akka actor 中设置构造字段或配置加载?
【发布时间】:2019-11-06 02:53:43
【问题描述】:

我有一个场景,我需要从每个公司的 Soap 服务 API 调用中获取数据。 对于每个行业,我都有数千家公司。

要调用 API,我需要设置/传递除 companyid 之外的几个参数。这些参数,如用户名、密码、url、端口等...更多的配置或属性文件..

这些不会因每次调用(即每个 Actor)而改变。

我正在尝试使用 Akka Actor 系统来实现相同的公司检索,即调用 Soap Service API。

我是 Akka 新手,有什么帮助吗?

感谢和问候。

试过了:

CompanyActor -- 需要一个 companyId,因此创建了一个 CompanyInput,如下所示

CompanyInput{
 String companyId,
 DataAPIConnection conn;
}

我正在准备 CompanyInput,通过将所有有效的 userName 和 pwd 、 url 传递给 Soap Service API 调用来获取连接对象“conn”。 我也设置了 companyId。

然后创建 CompanyActor 。

@Override
        public void onReceive(Object msg) throws Throwable {
               if(msg instanceof CompanyInput) {
                   CompanyInput input = (CompanyInput)  msg;
                   logger.info("onRecive msg companyId : " + input.getCompanyId());
               }

        }

希望上述工作正常。如果需要更正,请提出建议。

但是我需要返回 CompanyInfo 对象,即从 SoapAPI 调用中读取字段并填充 CompanyInfo VO。

如何从 Actor 调用中返回一个对象? onReceive() 返回 void 所以我返回 Future ?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 你想用 Java 还是 Scala 来做这件事?
  • @RamanMishra Raman 请检查试过的。
  • @Iprakashv,是的,我的公司希望它是 Java,更准确地说是 spring-book 和 java 8。
  • 使用? (问)它返回一个 Future[Object] 这就是你从演员那里获得返回值的方式!你能提供你正在做的代码吗?或问?给你的演员?

标签: java scala spring-boot akka


【解决方案1】:

在 Akka 中,消息是单向的,接收函数不返回值。相反,您可以将回复消息发送回原始发件人:

https://doc.akka.io/docs/akka/current/actors.html#reply-to-messages

您可以使用“询问模式”来简化发送需要回复的消息。调用 ask 在 Java 中返回 CompletionStage(或在 Scala 中返回 Future),当接收参与者回复其发送者时完成:

https://doc.akka.io/docs/akka/current/actors.html#ask-send-and-receive-future

【讨论】:

  • 谢谢蒂姆,但是如果在第二个/被调用的演员中返回对象时发生任何异常......如何处理这些情况?
  • 我们可以在 Actor 中使用构造函数吗?对于每个actor实例,我不需要正确设置配置......如何以及在哪里设置配置相关参数?
  • @Shyam 错误处理包含在我链接到的文档中:“要完成带有异常的 CompletionStage,您需要向发件人发送 akka.actor.Status.Failure 消息。这没有完成当参与者在处理消息时抛出异常时自动执行。”
  • @Shyam 创建演员也包含在文档doc.akka.io/docs/akka/current/actors.html#creating-actors
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多