|
Una destination distribuita(DD) consiste in un gateway che permette di dispacciare messaggi JMS tra diverse destination fisiche. Le DD offrono due algoritmi per dispacciare fisicamente i messaggi: Round-Robin e Random. Ogni destination fisica a cui si appoggia una DD viene definita come membro. Un server JMS può contenere un solo membro associato ad una DD. I membri di una DD possono appoggiarsi a destination già configurate su un server JMS oppure possono essere generati in automatico nel momento della creazione. Ecco la sequenza delle operazioni per configurare una DD: 1. Configurare un cluster WLS. 2. Configurare una serie di JMS servers attivandoli sui WLS servers in cluster:  Fig 1  Fig 2  Fig 3  Fig 4 3. Configurare delle destination fisiche che saranno usate come membri sui JMS servers (Opzionale):  Fig 5  Fig 6 4. Configurare una Connection Factory attivandola sul cluster:  Fig 7  Fig 8  Fig 9 5. Riavviare i WLS servers sui quali si desidera attivare i JMS servers. 6. Creare una destination distribuita definendone: • Definire un nome logico • Definire un JNDI Name che sarà replicato nei nodi del cluster. • Configurare i membri nella DD(Manuale o Automatico). • Attivare la DD su un cluster.  Fig 10  Fig 11  Fig 12  Fig 13  Fig 14 Ecco di seguito un client che si connette alla nostra DD e la utilizza. import java.util.*; import javax.naming.*; import javax.jms.*; public class Sender { public static void main(String args[]) { final String CONNECTION_FACTORY = "JMSConnectionFactory"; final String QUEUE = "DistributedQueue"; QueueConnectionFactory qconFactory = null; QueueConnection qcon = null; QueueSession qsession = null; QueueSender qsender = null; Queue queue = null; TextMessage msg = null; Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env.put(Context.PROVIDER_URL, "t3://localhost:9001,localhost:9002"); env.put(Context.SECURITY_PRINCIPAL, "system"); env.put(Context.SECURITY_CREDENTIALS, "weblogic"); Context ctx = null; try { ctx = new InitialContext(env); qconFactory = (QueueConnectionFactory) ctx.lookup(CONNECTION_FACTORY); qcon = qconFactory.createQueueConnection(); qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queue = (Queue) ctx.lookup(QUEUE); qsender = qsession.createSender(queue); msg = qsession.createTextMessage(); msg.setText("TESTO DI PROVA"); qcon.start(); qsender.send(msg); }catch(Exception e) { e.printStackTrace(); }finally { try { if(qcon!=null)qcon.close(); if(ctx!=null)ctx.close(); }catch(Exception ee) { ee.printStackTrace(); } } } } I messaggi verranno distribuiti in maniera omogenea tra gli eventuali membri: Fig 15
|