2016-09-03 6 views
1

consitent-hashing-poolルータの場合、HOCON以下を指定すると、hashMappingをどのように指定しますか。Hoconを使用する場合のHashMappingの指定方法

let config = Configuration.load() 
let systemName = config.GetString("app-config.actorsystem", "my-system") 
let system = System.create systemName config 
let collectorRouter = 
    let hashMapping (msg:obj) = 
    match msg with 
    | :? Message as msg -> 
     match msg with 
     | Parse (_, req) -> req.uniqueId |> box 
    | _ -> "-" |> box 
    ConsistentHashingPool (10, ConsistentHashMapping hashMapping) 
let dataCollectorProps = 
    { props (dataCollector settings.collector) with 
     Router = Some (collectorRouter :> RouterConfig)} //(FromConfig.Instance.WithFallback collectorRouter) 
let test = spawn system "data-collector" <| dataCollectorProps 

Router = Some (collectorRouter :> RouterConfig)考える

akka { 
     actor { 
     serializers { 
      wire = "Akka.Serialization.WireSerializer, Akka.Serialization.Wire" 
     } 
     serialization-bindings { 
      "System.Object" = wire 
     } 
     deployment { 
      /data-collector { 
      router = consistent-hashing-pool 
      nr-of-instances = 10 
      } 
     } 
     } 
     loggers = ["Akka.Logger.NLog.NLogLogger,Akka.Logger.NLog"] 
    } 

Router = Some (FromConfig.Instance.WithFallback collectorRouter)仕事は

hashMapping機能を指定するための正しい方法は何しないのですか?

編集1 コンソールから警告がthree ways of specifying the hash keyがあり

Akka.Routing.ConsistentHashingRoutingLogic|Message [Message] must be handled by hashMapping, or implement [IConsistentHashable] or be wrapped in [ConsistentHashableEnvelope]

答えて

0

です。私のお気に入りはIConsistentHashableを実装し、ConsistentHashKeyプロパティから(メッセージのいくつかのプロパティに基づいて)キーを返すことです。 (C#で、申し訳ありません私は、F#を知らない)my Consistent Hashing articleから

例の抜粋:

public class CurrencyPriceChangeMessage : IConsistentHashable 
{ 
    public string CurrencyPair { get; } 
    public decimal Price { get; } 

    public object ConsistentHashKey 
    { 
     get 
     { 
      return this.CurrencyPair; 
     } 
    } 

ハッシュキーは常に同じrouteeに同じキーでメッセージをルーティングするために使用されます。

+0

hoconでnr-of-instancesを3に変更しました。ルータに3つのルートがありました。ハッシングもうまくいった。それは、ルータがコードとホーコンの両方で定義されている場合、それはhoconから1つを選び、コードから設定を頼みますか? – ritcoder

+0

私が知る限り、コードとHOCONの両方で設定が定義されると、HOCONが優先されます。 – Gigi

+0

注目。それはうまくいく。 – ritcoder

関連する問題