Cuestión : Intercambio 2010 - CAS/HT/MBX con de gran disponibilidad

Hola allí, el

I tiene dos servidores con el intercambio 2010 en el triunfo 2k8 R2. Estos servidores tienen CAS/HT/MBX y DAG configurados. Mi pregunta es… Cómo puedo hacer un de gran disponibilidad de estos el servidor, así que puedo tener solamente una dirección para el servidor 2, y si uno falla, el otro asumirá. ¿No estoy preocupado de balance de la carga, apenas necesito HA.

NLB podría ser una manera, pero es imposible configurar NLB en el servidor con el DAG, y no puedo utilizar tercer persona NLB products.

Does que cualquier persona puede ayudarme?

Thanks
class= del

Respuesta : Intercambio 2010 - CAS/HT/MBX con de gran disponibilidad

La primera cosa que recomendaría está moviendo su servicio del ejecutor fuera del lazo.  Usted necesita realmente solamente crear eso una vez.  Dependiendo de su puesta en práctica, usted puede poder hacerle una variable de la clase, cualquiera los parásitos atmosféricos que son compartidos por todos los casos de esta clase o de un miembro privado si cada clase necesita su propia piscina del hilo de rosca.  Cualquier manera, mientras usted no cierre el servicio, usted podrá reutilizar esos hilos de rosca en vez de incurrir en los gastos indirectos de comenzarlos cada vez.  Si las llamadas múltiples a este método necesitan funcionar simultáneamente, mover la creación del servicio del ejecutor nuevamente dentro del método, pero fuera del lazo.

También parece usted está creando 10 piscinas del hilo de rosca, con 10 hilos de rosca cada uno para procesar cada orden.  El código que he atado se vuelve a trabajar para procesar todo proveyó de órdenes 10 hilos de rosca.
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:
clase pública ClearDownService {
    hilos de rosca privados de la internacional;
    executorService privado de ExecutorService;

    ClearDownService público (hilos de rosca de la internacional) {
        si (hilos de rosca < 1="">= 1. “);
        }
        this.threads = hilos de rosca;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I modificó su código de la iteración para asumir que usted tiene cierta colección de objetos de OrderModel
    // que usted está utilizando para conseguir el iterator.  Puesto que usted está utilizando JDK 1.5+, su mucho más
    // legible y conservable utilizar productos genéricos en vez de echar la vuelta de iterator.next ().
    // I también modificó su código de la iteración para utilizar la construcción incorporada del foreach.
    checkOrders vacíos del público (órdenes de colección) {
        // inicializa el cierre para el número total de órdenes, en vez de los hilos de rosca.
        // que esto se asegura que todas las órdenes estén procesadas antes de que este método termine
        startLatch final de CountDownLatch = nuevo CountDownLatch (orders.size ());

        // puesto que usted está utilizando JDK 1.5+, más fácil leer y mantener si usted utiliza productos genéricos
        // y el foreach incorporado en vez del iterator
        para (modelo final de OrderModel: órdenes) {
            executorService.submit (nuevo Runnable () {
                vacío del público funcionado con () {
                    intento {
                        Calendario ahora = Calendar.getInstance (TimeZone.getTimeZone (“Europa/Londres”));
                        si (isEligibleForClearDown (modelo, master.getCleardownFields () .getClearDownReqFrom (), ahora)) {
                            si (model.getOrderFields () .hasParentOrderId ()) {
                                // agrega todas las pedidos del niño al resultado final
                                results.add (modelo);
                            } {
                                // agrega pedidos del padre a la lista de padre
                                parentOrders.add (modelo);
                            }
                        }
                    } finalmente {
                        // que pone esto en finalmente un bloque se asegura que consigue llamado cueste lo que cueste
                        // de cuaesquiera excepciones que ocurran en el cuerpo del método
                        startLatch.countDown ();
                    }
                }
            });
        }
        intento {
            startLatch.await (); espera de // para todos los objetos al proceso completo
        } retén (InterruptedException e) {
            LOGGER.error (“excepción interrumpida mientras que espera el cierre de la cuenta descendiente a end.");
        }
    }
}
Otras soluciones  
 
programming4us programming4us