logo

ЈМС Туториал

ЈМС (Јава Мессаге Сервице) је АПИ који пружа могућност креирања, слања и читања порука. Обезбеђује слабо повезану, поуздану и асинхрону комуникацију.

стринг у низу у ц

ЈМС је такође познат као сервис за размену порука.


Разумевање размене порука

Размена порука је техника за комуницирање апликација или софтверских компоненти.

ЈМС се углавном користи за слање и примање порука из једне апликације у другу.


Захтев ЈМС-а

Генерално, корисник шаље поруку апликацији. Али, ако желимо да пошаљемо поруку из једне апликације у другу, морамо да користимо ЈМС АПИ.

Размотрите сценарио, једна апликација А ради у ИНДИЈАИ, а друга апликација Б ради у САД. Да бисмо послали поруку од А апликације ка Б, морамо да користимо ЈМС.


Предност ЈМС-а

1) асинхрони: Да би примио поруку, клијент није обавезан да пошаље захтев. Порука ће аутоматски стићи клијенту.

2) Поуздан: Обезбеђује сигурност да је порука испоручена.


Домени за размену порука

Постоје две врсте домена за размену порука у ЈМС-у.

  1. Домен за размену порука од тачке до тачке
  2. Домен за размену порука издавача/претплатника

1) Домен за размену порука од тачке до тачке (ПТП).

У ПТП моделу, једна порука је предати једном примаоцу само. овде, Куеуе користи се као посредни софтвер оријентисан на поруке (МОМ).

Ред је одговоран да задржи поруку док прималац није спреман.

У ПТП моделу постоји нема временске зависности између пошиљаоца и примаоца.


2) Домен за размену порука издавач/претплатник (Пуб/Суб).

У Пуб/Суб моделу, једна порука је достављен свим претплатницима . То је као емитовање. овде, Тема користи се као средњи софтвер оријентисан на поруке који је одговоран за чување и испоруку порука.

У ПТП моделу постоји зависност од времена између издавача и претплатника.



Модел програмирања ЈМС


Пример ЈМС реда

Да бисте развили пример ЈМС реда, потребно је да инсталирате било који сервер апликација. Ево, користимо глассфисх3 сервер на коме креирамо два ЈНДИ.

  1. Креирајте фабрику веза под називом миКуеуеЦоннецтионФацтори
  2. Креирајте одредишни ресурс под називом миКуеуе

Након креирања ЈНДИ, креирајте серверску и пријемну апликацију. Морате да покренете сервер и пријемник у другој конзоли. Овде користимо ецлипсе ИДЕ, он се подразумевано отвара у другој конзоли.

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);} } }