Prioridad De Mensajes JMS
Como sabemos una cola de mensajes como su nombre lo indica va encolando mensajes que le van llegando, si agregamos en el envió de un mensaje una Prioridad, el mensaje con mayor prioridad se va a agregar primero en la cola de mensajes, o sea que va a ser el primero en salir.
JMS propone 10 niveles de Prioridad, de 0 a 9, la prioridad por defecto es 4, la mas alta es 9 y la mas baja es 0. O sea que si enviamos mensajes con diferentes números de prioridades estos se van a ir ordenando de mayor a menor
Cómo asignarle una Prioridad a un mensaje
Siguiendo con el ejemplo de Leo (el de las tostadas) ahora vamos a pedir tostadas pero con prioridad:
import javax.jms.*; public class Dib { public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory"; public final static String PROVIDER_URL="t3://localhost"; public final static String JMS_FACTORY="HeladeraCF"; public final static String QUEUE="HeladeraQueue"; public void pedirTostadas() { //Obtenemos el !InitialContext Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); env.put(Context.PROVIDER_URL, PROVIDER_URL); InitialContext ctx = new InitialContext(env); //Buscamos el factory y la conexiona la col QueueConnectionFactory qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY) QueueConnection qcon = qconFactory.createQueueConnection(); //Buscamos la cola QueueSession qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = (Queue) ctx.lookup(QUEUE); //Creamos el mensaje TextMessage msg = qsession.createTextMessage(); msg.setText("Gaz, quiero 4 tostadas"); QueueSender qsender = qsession.createSender(queue); //Asignamos Prioridad qsender.setPriority(9); //Enviamos el mensaje qsender.send(msg); //somos prolijos y cerramos todo qsender.close(); qsession.close() qcon.close(); } }
Con esto hicimos que el mensaje de pedir tostadas que colocado primero en la cola, o por lo menos logramos que se ponga último en los mensajes con prioridad 9.