Questione : Scambio 2010 - CAS/HT/MBX con alta disponibilità

Ciao là, il

I ha due assistenti con lo scambio 2010 sulla vittoria 2k8 R2. Questi assistenti hanno CAS/HT/MBX e DAG configurati. La mia domanda è… Come posso rendere ad un'alta disponibilità dei questi l'assistente, in modo da posso avere soltanto un indirizzo per l'assistente 2 e se uno viene a mancare, altro quello presupporrà. Non sono preoccupato per l'equilibrio del carico, ho bisogno appena di HA.

NLB potrei essere un senso, ma è impossible da configurare NLB sull'assistente con il DAG e non posso usare dei terzi NLB products.

Does che chiunque può aiutarlo?

Thanks
class= del

Risposta : Scambio 2010 - CAS/HT/MBX con alta disponibilità

La prima cosa che suggerirei sta spostando il vostro servizio dell'esecutore fuori del ciclo.  Dovete realmente soltanto generare una volta quello.  Secondo la vostra esecuzione, potete potere rendergli una variabile del codice categoria, l'una o l'altra un'elettricità statica che è ripartita da tutti i casi di questo codice categoria o di un membro riservato se ogni codice categoria ha bisogno del relativo proprio stagno del filetto.  Il uno o il altro senso, finchè non chiudete il servizio giù, potrete riutilizzare quei filetti invece di subire le spese generali di iniziarli sempre.  Se le chiamate multiple a questo metodo debbano funzionare simultaneamente, spostare la creazione di servizio dell'esecutore nuovamente dentro il metodo, ma fuori del ciclo.

Inoltre assomiglia voi sta generando 10 stagni del filetto, con 10 filetti ciascuno per procedare ogni ordine.  Il codice che ho attaccato è ripreso per procedare tutto ha fornito gli ordini 10 filetti.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
codice categoria pubblico ClearDownService {
    filetti riservati di int;
    executorService riservato di ExecutorService;

    ClearDownService pubblico (filetti di int) {
        se (filetti < 1="">= 1. “);
        }
        this.threads = filetti;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I ha modificato il vostro codice di ripetizione per presupporre che aveste certa accumulazione degli oggetti di OrderModel
    // che state usando per ottenere il iterator.  Poiché state usando il JDK 1.5+, relativo molto più
    // leggibile e mantenibile usare i Generics invece di lanciare il ritorno di iterator.next ().
    // I inoltre ha modificato il vostro codice di ripetizione per usare la costruzione incorporata del foreach.
    checkOrders vuoti del pubblico (ordini di accumulazione) {
        // inizializza il fermo per il numero totale degli ordini, anziché i filetti.
        // questo assicura che tutti gli ordini siano procedati prima che questo metodo completi
        startLatch finale che di CountDownLatch = nuovo CountDownLatch (orders.size ());

        // poiché state usando il JDK 1.5+, più facile leggere ed effettuare se usate i generics
        // e il foreach incorporato anziché il iterator
        per (modello finale di OrderModel: ordini) {
            executorService.submit (nuovo praticabile () {
                vuoto del pubblico funzionato () {
                    prova {
                        Calendario ora = Calendar.getInstance (TimeZone.getTimeZone (“Europa/Londra„));
                        se (isEligibleForClearDown (modello, master.getCleardownFields () .getClearDownReqFrom (), ora)) {
                            se (model.getOrderFields () .hasParentOrderId ()) {
                                // aggiunge tutti gli ordini del bambino al risultato finale
                                results.add (modello);
                            } altrimenti {
                                // aggiunge gli ordini del genitore alla lista di genitore
                                parentOrders.add (modello);
                            }
                        }
                    } infine {
                        // che mette questo infine in un blocco assicura che ottenga denominato con noncuranza
                        // di qualsiasi eccezioni che si presentano nel corpo del metodo
                        startLatch.countDown ();
                    }
                }
            });
        }
        prova {
            startLatch.await (); aspettare di // tutti gli oggetti all'elaborazione completa
        } fermo (InterruptedException e) {
            LOGGER.error (“eccezione interrotta mentre aspettando il fermo di conto alla rovescia a end.");
        }
    }
}
Altre soluzioni  
 
programming4us programming4us