JMS Selector

di il
6 risposte

JMS Selector

Salve,

Non riesco ad implementare la selezione dei messaggi che mi arrivano da una coda.
Sto utilizzando Java 8, Eclipse Neon, TibcoServer EMS, come provider, Maven e le API JMS...
Vorrei discriminare i messaggi che arrivano sulla coda con JMS Selector, ma non ci riesco,
questa è la riga di codice che non riesco a capire; indico con sample il nome della coda e
con SERVICE il campo che vorrei discriminare (se dentro SERVICE c'è scritto pippo fa una cosa altrimenti un altra)

MessageConsumer consume = session.createConsumer("sample", "SERVICE");

QueueConnection connection = null;
/* JMS point to point */
QueueConnectionFactory factory = new TibjmsQueueConnectionFactory(EMSConnection);
connection = factory.createQueueConnection(EMSuserName, EMSpassword);
QueueSession session = connection.createQueueSession(false, Tibjms.EXPLICIT_CLIENT_ACKNOWLEDGE);

// Use createQueue() to enable receiving from dynamic queues.
Queue receiverQueue = session.createQueue( Ottieni valore );
QueueReceiver receiver = session.createReceiver(receiverQueue);
connection.start();
// *********** JMS SELECTOR ****************

MessageConsumer consume = session.createConsumer("sample", "SERVICE");

while (true) {
Message message = consume.receive();

etc...


Potreste propormi un esempio semplice, che poi adatto
Grazie

6 Risposte

  • Re: JMS Selector

    manuel__89 ha scritto:


    MessageConsumer consume = session.createConsumer("sample", "SERVICE");
    Non me ne intendo granché di JMS (giusto studiato qualcosa anni fa). Ma .... sei sicuro che un selettore "SERVICE" sia corretto?
    I selettori in JMS si basano su un sottoinsieme della sintassi usata in SQL-92 per le espressioni condizionali.

    Quindi un selettore potrebbe essere es. "Counter < 100 AND Name LIKE 'A%'"

    Mi verrebbe da pensare qualcosa tipo "SERVICE IS NOT NULL"

    P.S. documentati sulla sintassi dei selettori
  • Re: JMS Selector

    Sarà una cosa del tipo SERVICE == pippo...

    Pero un esempio ?
  • Re: JMS Selector

    manuel__89 ha scritto:


    Sarà una cosa del tipo SERVICE == pippo...
    Se vuoi solo sapere se esiste un header/property chiamato SERVICE, basta sicuramente "SERVICE IS NOT NULL".
    Se vuoi verificare che contiene una stringa: "SERVICE = 'pippo'" (nota gli apici e 1 solo = )

    Ripeto che si tratta di espressioni condizionali SQL base. NON è Java.

    manuel__89 ha scritto:


    Pero un esempio ?
    Ne trovi sicuramente a vagonate in rete.
  • Re: JMS Selector

    Consiglio: leggi il documento di Java Message Service 2.0 Specification che trovi qui:


    Dalla sezione 3.8.1.1. Message selector syntax c'è appunto la spiegazione della sintassi dei selettori. I documenti di "specifica" non sono in genere facili da leggere ma quella parte mi pare abbastanza chiara e "leggibile".
  • Re: JMS Selector

    Grazieeeeeeeee, posto la soluzione:
     
     String selector = "SERVICE = 'pippo'";
    QueueReceiver receiver = session.createReceiver(receiverQueue, selector);
    
    			while (true) {
    				Message message = receiver.receive();
    				String replyString = message.getStringProperty("SERVICE");
    	                         System.out.println(replyString);
    	            
    	            
    E stampa il valore del Campo SERVICE...Attenzione non il body
  • Re: JMS Selector

    manuel__89 ha scritto:


      String selector = "SERVICE = 'pippo'";
    Sì, la sintassi è proprio quella.
Devi accedere o registrarti per scrivere nel forum
6 risposte