Question : Échange 2010 - CAS/HT/MBX avec facilement disponible

Salut là, le

I ont deux serveurs avec l'échange 2010 sur la victoire 2k8 R2. Ces serveurs ont CAS/HT/MBX et DAG configurés. Ma question est… Comment peux je rendre un facilement disponible des ces le serveur, ainsi je peux avoir seulement une adresse pour le serveur 2, et si on échoue, l'encore supposera. Je ne suis pas inquiété de l'équilibre de charge, est-ce que j'ai besoin juste de HA.

NLB pourrais être une manière, mais est-il impossible de configurer NLB sur le serveur avec le DAG, et je ne peux employer aucun tiers NLB products.

Does que n'importe qui peut m'aider ?

Thanks
class= de

Réponse : Échange 2010 - CAS/HT/MBX avec facilement disponible

La première chose que je recommanderais déplace votre service d'exécuteur en dehors de de la boucle.  Vous devez vraiment seulement créer cela une fois.  Selon votre exécution, vous pouvez pouvoir lui faire une variable de classe, l'une ou l'autre une charge statique qui est partagée par tous les exemples de cette classe ou d'un membre privé si chaque classe a besoin de sa propre piscine de fil.  L'une ou l'autre manière, tant que vous ne fermez pas le service, vous pourrez réutiliser ces fils au lieu d'encourir les frais généraux de les commencer chaque fois.  Si les appels multiples à cette méthode devront fonctionner simultanément, déplacer la création de service d'exécuteur de nouveau dans la méthode, mais en dehors de de la boucle.

Elle ressemble également à vous créent 10 piscines de fil, avec 10 fils chacun pour traiter chaque ordre.  Tout le code que j'ai attaché est retouché pour traiter a fourni à des ordres 10 fils.
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 :
classe publique ClearDownService {
    fils privés d'international ;
    executorService privé d'ExecutorService ;

    ClearDownService public (fils d'international) {
        si (fils < 1="">= 1. « ) ;
        }
        this.threads = fils ;
        this.executorService = Executors.newFixedThreadPool (this.threads) ;
    }

    // I a modifié votre code d'itération pour supposer que vous avez une certaine collection d'objets d'OrderModel
    // que vous employez pour obtenir l'iterator.  Puisque vous employez JDK 1.5+, son beaucoup plus
    // lisible et maintenable pour employer des médicaments génériques au lieu de mouler le retour d'iterator.next ().
    // I a également modifié votre code d'itération pour employer la construction intégrée de foreach.
    checkOrders vides de public (ordres de collection) {
        // initialisent le verrou pour tout le nombre d'ordres, au lieu des fils.
        // que ceci s'assure que tous les ordres sont traités avant que cette méthode accomplisse
        startLatch final de CountDownLatch = nouveau CountDownLatch (orders.size ());

        // puisque vous employez JDK 1.5+, plus facile de lire et maintenir si vous employez des médicaments génériques
        // et le foreach intégré au lieu de l'iterator
        pour (modèle final d'OrderModel : ordres) {
            executorService.submit (nouveau praticable () {
                vide de public couru () {
                    essai {
                        Calendrier maintenant = Calendar.getInstance (TimeZone.getTimeZone (la « Europe/Londres »));
                        si (isEligibleForClearDown (modèle, master.getCleardownFields () .getClearDownReqFrom (), maintenant)) {
                            si (model.getOrderFields () .hasParentOrderId ()) {
                                // ajoutent tous les ordres d'enfant au résultat final
                                results.add (modèle) ;
                            } autrement {
                                // ajoutent des ordres de parent à la liste de parent
                                parentOrders.add (modèle) ;
                            }
                        }
                    } finalement {
                        // mettant ceci dans finalement un bloc s'assure qu'il obtient appelé sans se soucier
                        // de toutes exceptions qui se produisent dans le corps de la méthode
                        startLatch.countDown () ;
                    }
                }
            }) ;
        }
        essai {
            startLatch.await () ; attente de // tous les objets au traitement complet
        } crochet (InterruptedException e) {
            LOGGER.error (« exception interrompue tout en attendant le verrou de compte à rebours à end.") ;
        }
    }
}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us