ЈМС (Јава Мессаге Сервице) је АПИ који пружа могућност креирања, слања и читања порука. Обезбеђује слабо повезану, поуздану и асинхрону комуникацију.
стринг у низу у ц
ЈМС је такође познат као сервис за размену порука.
Разумевање размене порука
Размена порука је техника за комуницирање апликација или софтверских компоненти.
ЈМС се углавном користи за слање и примање порука из једне апликације у другу.
Захтев ЈМС-а
Генерално, корисник шаље поруку апликацији. Али, ако желимо да пошаљемо поруку из једне апликације у другу, морамо да користимо ЈМС АПИ.
Размотрите сценарио, једна апликација А ради у ИНДИЈАИ, а друга апликација Б ради у САД. Да бисмо послали поруку од А апликације ка Б, морамо да користимо ЈМС.
Предност ЈМС-а
1) асинхрони: Да би примио поруку, клијент није обавезан да пошаље захтев. Порука ће аутоматски стићи клијенту.
2) Поуздан: Обезбеђује сигурност да је порука испоручена.
Домени за размену порука
Постоје две врсте домена за размену порука у ЈМС-у.
- Домен за размену порука од тачке до тачке
- Домен за размену порука издавача/претплатника
1) Домен за размену порука од тачке до тачке (ПТП).
У ПТП моделу, једна порука је предати једном примаоцу само. овде, Куеуе користи се као посредни софтвер оријентисан на поруке (МОМ).
Ред је одговоран да задржи поруку док прималац није спреман.
У ПТП моделу постоји нема временске зависности између пошиљаоца и примаоца.
2) Домен за размену порука издавач/претплатник (Пуб/Суб).
У Пуб/Суб моделу, једна порука је достављен свим претплатницима . То је као емитовање. овде, Тема користи се као средњи софтвер оријентисан на поруке који је одговоран за чување и испоруку порука.
У ПТП моделу постоји зависност од времена између издавача и претплатника.
Модел програмирања ЈМС
Пример ЈМС реда
Да бисте развили пример ЈМС реда, потребно је да инсталирате било који сервер апликација. Ево, користимо глассфисх3 сервер на коме креирамо два ЈНДИ.
- Креирајте фабрику веза под називом миКуеуеЦоннецтионФацтори
- Креирајте одредишни ресурс под називом миКуеуе
Након креирања ЈНДИ, креирајте серверску и пријемну апликацију. Морате да покренете сервер и пријемник у другој конзоли. Овде користимо ецлипсе ИДЕ, он се подразумевано отвара у другој конзоли.
1) Креирајте фабрику везе и одредишни ресурс
Отворите администраторску конзолу сервера према УРЛ адреси хттп://лоцалхост:4848
Пријавите се са корисничким именом и лозинком.
Кликните на ЈМС ресурс -> Фабрике конекција -> Ново , сада напишите име базена и изаберите тип ресурса као КуеуеЦоннецтионФацтори, а затим кликните на дугме ок.
Кликните на ЈМС ресурс -> Ресурси одредишта -> Ново , сада напишите ЈНДИ име и име физичког одредишта, а затим кликните на дугме у реду.
2) Креирајте апликацију пошиљаоца и примаоца
Хајде да видимо шифру пошиљаоца и примаоца. Имајте на уму да је Рецеивер повезан са слушачем који ће бити позван када корисник пошаље поруку.
Фајл: МиСендер.јаваimport java.io.BufferedReader; import java.io.InputStreamReader; import javax.naming.*; import javax.jms.*; public class MySender { public static void main(String[] args) { try { //Create and start connection InitialContext ctx=new InitialContext(); QueueConnectionFactory f=(QueueConnectionFactory)ctx.lookup('myQueueConnectionFactory'); QueueConnection con=f.createQueueConnection(); con.start(); //2) create queue session QueueSession ses=con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); //3) get the Queue object Queue t=(Queue)ctx.lookup('myQueue'); //4)create QueueSender object QueueSender sender=ses.createSender(t); //5) create TextMessage object TextMessage msg=ses.createTextMessage(); //6) write message BufferedReader b=new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println('Enter Msg, end to terminate:'); String s=b.readLine(); if (s.equals('end')) break; msg.setText(s); //7) send message sender.send(msg); System.out.println('Message successfully sent.'); } //8) connection close con.close(); }catch(Exception e){System.out.println(e);} } }Датотека: МиРецеивер.јава
import javax.jms.*; import javax.naming.InitialContext; public class MyReceiver { public static void main(String[] args) { try{ //1) Create and start connection InitialContext ctx=new InitialContext(); QueueConnectionFactory f=(QueueConnectionFactory)ctx.lookup('myQueueConnectionFactory'); QueueConnection con=f.createQueueConnection(); con.start(); //2) create Queue session QueueSession ses=con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); //3) get the Queue object Queue t=(Queue)ctx.lookup('myQueue'); //4)create QueueReceiver QueueReceiver receiver=ses.createReceiver(t); //5) create listener object MyListener listener=new MyListener(); //6) register the listener object with receiver receiver.setMessageListener(listener); System.out.println('Receiver1 is ready, waiting for messages...'); System.out.println('press Ctrl+c to shutdown...'); while(true){ Thread.sleep(1000); } }catch(Exception e){System.out.println(e);} } }Датотека: МиЛистенер.јава
import javax.jms.*; public class MyListener implements MessageListener { public void onMessage(Message m) { try{ TextMessage msg=(TextMessage)m; System.out.println('following message is received:'+msg.getText()); }catch(JMSException e){System.out.println(e);} } }
Прво покрените класу Рецеивер, а затим класу Сендер.
Пример теме ЈМС
То је исто као и ЈМС ред, али морате да промените Ред у Тему, Пошиљалац у Публисхер и Прималац у Претплатник.
Морате да креирате 2 ЈНДИ имена миТопицЦоннецтионФацтори и миТопиц .
Фајл: МиСендер.јаваimport java.io.BufferedReader; import java.io.InputStreamReader; import javax.naming.*; import javax.jms.*; public class MySender { public static void main(String[] args) { try { //Create and start connection InitialContext ctx=new InitialContext(); TopicConnectionFactory f=(TopicConnectionFactory)ctx.lookup('myTopicConnectionFactory'); TopicConnection con=f.createTopicConnection(); con.start(); //2) create queue session TopicSession ses=con.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); //3) get the Topic object Topic t=(Topic)ctx.lookup('myTopic'); //4)create TopicPublisher object TopicPublisher publisher=ses.createPublisher(t); //5) create TextMessage object TextMessage msg=ses.createTextMessage(); //6) write message BufferedReader b=new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println('Enter Msg, end to terminate:'); String s=b.readLine(); if (s.equals('end')) break; msg.setText(s); //7) send message publisher.publish(msg); System.out.println('Message successfully sent.'); } //8) connection close con.close(); }catch(Exception e){System.out.println(e);} } }Датотека: МиРецеивер.јава
import javax.jms.*; import javax.naming.InitialContext; public class MyReceiver { public static void main(String[] args) { try { //1) Create and start connection InitialContext ctx=new InitialContext(); TopicConnectionFactory f=(TopicConnectionFactory)ctx.lookup('myTopicConnectionFactory'); TopicConnection con=f.createTopicConnection(); con.start(); //2) create topic session TopicSession ses=con.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); //3) get the Topic object Topic t=(Topic)ctx.lookup('myTopic'); //4)create TopicSubscriber TopicSubscriber receiver=ses.createSubscriber(t); //5) create listener object MyListener listener=new MyListener(); //6) register the listener object with subscriber receiver.setMessageListener(listener); System.out.println('Subscriber1 is ready, waiting for messages...'); System.out.println('press Ctrl+c to shutdown...'); while(true){ Thread.sleep(1000); } }catch(Exception e){System.out.println(e);} } }Датотека: МиЛистенер.јава
import javax.jms.*; public class MyListener implements MessageListener { public void onMessage(Message m) { try{ TextMessage msg=(TextMessage)m; System.out.println('following message is received:'+msg.getText()); }catch(JMSException e){System.out.println(e);} } }