imita il bilanciamento del carico a livello di codice

-1

Ho implementato un semplice sistema di messaggistica IMS per uso personale all'interno dell'applicazione, che consente di inviare e ricevere messaggi per gli oggetti.

Ho un oggetto singleton IMSContext che ha un metodo transfer che viene utilizzato per passare i messaggi da ogni oggetto

IMSContext.instance.transfer(message)

Anche questo IMSContext memorizza tutti gli oggetti IMS .

Poiché utilizzo il solo metodo per trasferire il messaggio, voglio imitare un qualche tipo di load balancing - assumendo che questo unico metodo sia un collo di bottiglia - quando ci sono troppi messaggi che vengono trasferiti voglio usare un qualche tipo di meccanismo che sposterebbe il flusso dei messaggi su un altro metodo ... o forse addirittura su un oggetto.

Ma non ho idea di come farlo. Potrebbe consigliare qualcosa o aiutare con l'approccio?

    
posta lapots 22.09.2016 - 22:15
fonte

1 risposta

1

Non sono proprio sicuro di capire cosa stai cercando di ottenere. Ma ecco qui.

Riepilogo dei problemi

  • Hai una classe di messaggistica con trasferimento di metodo
  • Vuoi diffondere le chiamate da trasferire su più istanze della classe di messaggistica
  • Vuoi che il codice chiamante non si accorga delle numerose istanze

prima cosa. Non usare singleton.

secondo. avvolgere Messaging in una nuova classe MessagingLoadBalanced che contiene un elenco di istanze di Messaging. qualcosa come:

class MessagingLoadBalanced : IMessaging
{
    private List<Messaging> messagings;
    private int i = 0;

    Public void Transfer(object message)
    {
        messagings[i].Transfer(message);
        i++;
        if(i >= messagings.Length) { i=0;}
    }
}

infine, usa questa nuova classe nel tuo codice chiamante come se fosse un normale IMessaging

    
risposta data 23.09.2016 - 13:03
fonte

Leggi altre domande sui tag