1

私はAKKAのリモーティング機能を使っています。1つの問題を除いて、非常にうまく機能しています。ホスト名に基づいてリモート アクターを検索しようとすると、検索に失敗します。ただし、IPアドレスに基づいて実行すると、正常に機能します。ホスト名と IP アドレスの両方で均一に動作させる方法はありますか?

私のapplication.confは以下のようなものです:

akka {
  version = "2.0.2"
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
        ...
      use-passive-connections = off
      hostname = ""
      port = 8000
        ...
    }
    ...
  }
}

別のマシンから:

actorSystem.actorFor("akka://MyActorSystem@10.0.0.1:8000/user/MyActor")  //**Works**
actorSystem.actorFor("akka://MyActorSystem@hostname.abc.com:8000/user/MyActor") //**Fails**
4

1 に答える 1

0

私もこの行動を見たことがあります。Akka アクター システムが からシステム ホスト名を取得することを期待していましたjava.net.InetAddress.getLocalHost.getHostName

ただし、これは常に機能するとは限りません。利点として、ホスト名を application.conf ファイルに追加すると、正しい結果が得られ、 経由でリモート接続を検索できるようになりますcontext.actorFor("akka://host.domain.com:8000/user/whatever")

InetAddressScala REPL で簡単に確認できるように、上記の呼び出しで目的のホスト名文字列が生成される場合でも、Akka は IP アドレスへのバインドを好むようです。Akka がシステムの起動時にエイリアスに自動的にバインドするようにしたい場合は、Config オブジェクト (set akka.remote.netty.hostname) を に渡す前に変更することを検討してくださいActorSystem.apply

もちろん、あまり望ましくない他のオプションは、デプロイされた各ノードに値を設定することです。

それが役立つことを願っています!

于 2012-09-01T16:34:55.100 に答える