2016-09-03 2 views
1

Étant donné le HOCON ci-dessous pour un routeur consitent-hashing-pool, comment puis-je spécifier le hashMapping.Comment spécifier HashMapping lors de l'utilisation de Hocon

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"] 
    } 

Compte tenu

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) travail

Router = Some (FromConfig.Instance.WithFallback collectorRouter) ne le fait pas

Quelle est la bonne façon de spécifier la fonction hashMapping?

Edit 1 L'avertissement de la console est

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

Répondre

0

Il y a three ways of specifying the hash key. Mon préféré est d'implémenter IConsistentHashable et de renvoyer la clé (basée sur certaines propriétés du message) de la propriété ConsistentHashKey.

extrait Exemple de my Consistent Hashing article (en C#, désolé, je ne sais pas F #):

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

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

La clé de hachage sera utilisé pour acheminer des messages avec la même clé toujours à la même routée.

+0

J'ai changé le 'nr-de-instances' à 3 dans hocon et le routeur avait trois routes. Le hachage a également travaillé. Est-il vrai que lorsque le routeur est défini à la fois en code et en hocon, il choisit celui de hocon et l'ajoute à la configuration du code? – ritcoder

+0

Autant que je sache, quand un paramètre est défini à la fois dans le code et HOCON, le HOCON a la priorité. – Gigi

+0

Noté. Cela fonctionne bien alors. – ritcoder