Condividi tramite


Ricevere notifiche di modifica del database Oracle in più posizioni di ricezione

Si consideri uno scenario in cui sono state create più posizioni di ricezione come parte di applicazioni BizTalk diverse configurate per ricevere notifiche di query per la stessa tabella (ad esempio ACCOUNTACTIVITY) nello stesso database. Se nella stessa tabella vengono inseriti centinaia di record, tutte le posizioni di ricezione riceveranno il messaggio di notifica. Per ricevere notifiche in più posizioni di ricezione, è possibile chiamare le operazioni dall'applicazione BizTalk in modo che, se una notifica viene ricevuta da una posizione di ricezione, l'altra posizione di ricezione non riceve la stessa notifica. È quindi possibile bilanciare in modo efficace le notifiche di bilanciamento del carico ricevute in più posizioni.

Le attività necessarie per configurare un'orchestrazione per bilanciare il carico delle notifiche di ricezione sono uguali a quella per la ricezione incrementale delle notifiche di modifica del database Oracle usando BizTalk Server. Questo argomento elenca l'unica differenza tra i due approcci.

Load-Balancing notifiche di query in più posizioni di ricezione

Come nell'argomento Ricezione delle notifiche di modifica del database Oracle in modo incrementale usando BizTalk Server, sono state configurate notifiche incrementali eseguendo una procedura di PROCESS_RECORDS. Per configurare il bilanciamento del carico, è possibile eseguire una stored procedure che elimina i record per cui è stata notificata. Si consideri ad esempio una stored procedure NOTIFY_LOAD_BALANCE con la definizione seguente:

PROCEDURE NOTIFY_LOAD_BALANCE (TABLE_DATA OUT SYS_REFCURSOR) IS
  var int;
BEGIN
  SELECT TID INTO var FROM ACCOUNTACTIVITY WHERE ROWNUM = 1 FOR UPDATE;
  OPEN TABLE_DATA FOR SELECT * FROM ACCOUNTACTIVITY WHERE TID = var;
  DELETE FROM ACCOUNTACTIVITY WHERE TID = var;
END NOTIFY_LOAD_BALANCE;

Quando si esegue questa stored procedure come parte dell'applicazione BizTalk, il record per cui la notifica è già stata ricevuta viene eliminata. Quindi, l'altra posizione di ricezione ottiene la notifica per il record successivo.

Ecco i passaggi di alto livello da eseguire per configurare il bilanciamento del carico per la ricezione di notifiche.

  1. Creare lo schema per la notifica (operazione in ingresso) e la procedura di NOTIFY_LOAD_BALANCE (operazione in uscita).

  2. Aggiungere un'orchestrazione e aggiungere tre messaggi per la ricezione della notifica, l'esecuzione della procedura e la risposta per la procedura.

  3. Creare un'orchestrazione aggiungendo forme Send and Receive, Costruisci forma messaggio e porte. È possibile usare lo stesso codice di esempio per creare un messaggio per richiamare la stored procedure di NOTIFY_LOAD_BALANCE. Si noti che durante l'esecuzione dell'operazione nella console di amministrazione di BizTalk Server, è necessario disporre del messaggio di richiesta per la procedura di NOTIFY_LOAD_BALANCE nella posizione C:\TestLocation\MessageIn. A questo scopo, poiché il frammento di codice richiamato come parte dell'orchestrazione creata in Ricezione delle notifiche di modifica del database Oracle In modo incrementale usando BizTalk Server crea un messaggio di richiesta in base al codice XML della richiesta presente in C:\TestLocation\MessageIn.

  4. Compilare e distribuire l'applicazione. Per illustrare il bilanciamento del carico, è necessario distribuire questa orchestrazione almeno in due computer diversi che hanno BizTalk Server e l'adattatore Oracle Database installato.

  5. Nella console di amministrazione BizTalk Server in entrambi i computer specificare le proprietà di associazione seguenti per il percorso di ricezione WCF-Custom o WCF-OracleDB:

    Binding, proprietà Valore
    InboundOperationType Impostare questa opzione su Notifica.
    NotificationPort Specifica il numero di porta che ODP.NET deve essere aperto per ascoltare la notifica di modifica del database dal database Oracle. Impostare questo valore sullo stesso numero di porta che è necessario aggiungere all'elenco eccezioni di Windows Firewall. Per istruzioni su come aggiungere porte all'elenco eccezioni di Windows Firewall, vedere https://go.microsoft.com/fwlink/?LinkID=196959. Importante: Se si imposta questo valore sul valore predefinito di -1, sarà necessario disabilitare completamente Windows Firewall per ricevere messaggi di notifica.
    NotificaStatement Impostare questa opzione su:

    SELECT TID,ACCOUNT,PROCESSED FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’Nota: È necessario specificare il nome della tabella insieme al nome dello schema. Ad esempio: SCOTT.ACCOUNTACTIVITY.
    NotifyOnListenerStart Impostare questa opzione su True.
  6. Avviare l'applicazione BizTalk.

  7. Per iniziare a ricevere notifiche, inserire centinaia di record nella tabella ACCOUNTACTIVITY. Durante questa operazione, assicurarsi che il codice XML di richiesta per richiamare la procedura di NOTIFY_LOAD_BALANCE sia disponibile in C:\TestLocation\MessageIn.

  8. Monitorare il percorso (in entrambi i computer) in cui l'applicazione BizTalk elimina i messaggi di notifica. Si noterà che del centinaio di record inseriti, una posizione ottiene notifiche per alcuni record mentre l'altra posizione ottiene la notifica per i record rimanenti. Insieme, entrambe le posizioni riceveranno una notifica per tutti i cento record.

Vedere anche

Ricezione di notifiche di modifica del database Oracle in modo incrementale tramite BizTalk Server