Vous êtes sur la page 1sur 7

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic

Raport
Lucrarea de laborator nr. 1
Disciplina PAD
Tema: Agent de mesagerie Message Broker

A efectuat: st. gr. Ti-141 Braga Eugen


A verificat: Ciorba Dumitru

Chiinu 2017
Scopul lucrarii: Integrarea bazat pe ageni de mesaje care ar permite o comunicare asincron
dintre componentele distribuite ale unui sistem.

1) Realizind acest agent de mesagerie am folosit protocolul TCP.


Protocolul de control al transmisiei este un protocol folosit de obicei de aplicaii care au nevoie de
confirmare de primire a datelor. Efectueaz o conectare virtual full duplex ntre dou puncte terminale,
fiecare punct fiind definit de ctre o adres IP i de ctre un port TCP.Transmission Control Protocol (TCP)
este unul dintre protocoalele de baz ale suitei de protocoale Internet. TCP este unul dintre cele dou
componente originale ale suitei (celalalt fiind Protocolul Internet, sau IP), astfel nct ntreaga suita este
frecvent menionat ca stiva TCP/IP. n special, TCP ofer ncredere, asigura livrarea ordonata a unui flux
de octei de la un program de pe un computer la alt program de pe un alt computer aflat n reea. Pe lng
sarcinile sale de gestionare a traficului, TCP controleaz mrimea segmentului de date, debitul de
informaie, rata la care se face schimbul de date.

Am folosit acest protocol fiindca:


- Este bazat pe conexiuni
- Asigura ca datele vor ajunge la destinatie in ordinea care trebuie.
- In caz ca mesajul a ajuns corupt, acesta va retransmite inca odata mesajul.
2) Descrierea componentelor care participa la schimbul de mesaje:
- Broker: este o componenta fizica care gestioneaza comunicarea dintre componentele unei
aplicatii distribuite. Avantajul utilizarii acestei tehnici consta in deculplarea receptorului de
transmitatorul mesajelor. Prin urmare o aplicatie participanta transmite mesaje doar agentului,
indicind un nume logic al receptorului.
o Este capabil sa primeasca si sa transmita asincron mesaje.
o Sa serializeze datele care le transmite
o Sa cunoasca cui trebuie sa transmita mesaje.
- Sender: este o componenta fizica care se conecteaza la agentul de mesaje si livreaza mesajele
care vor fi accesibile de receivers. Acestia se conecteaza la un anumit IP si portul care agentul
de mesaje asculta (port deschis), transmitind mesaje incontinuu tuturor receiverilor.
- Receiver: o componenta fizica care se conecteaza la agentul de mesaje si face subscribe ceea
ce semnifica ca ei sunt gata sa primeasca toate mesajele de la senderi. Atunci cind mesajele se
transmit de la broker la receiver ele se serializeaza si desirealizeaza.

3) Serializarea si desirealizarea obiectelor.


Sender transmite mesaje de tip String catre Broker. Acesta in timpul procesarii creeaza din acel String un
Obiect JSON care se transmite serializat.
jsonObject = new JsonObject();
jsonObject.addProperty("mesaj:", message);
jsonObject.addProperty("Sender:",(socket.getRemoteSocketAddress()).toString());
jsonQueu.add(jsonObject);

Acest obiect este compus din perechea nume-valoare, unde numele este String si valoarea este orice alt tip
a JsonElement
Serializarea se realizeaza prin tranformarea cu ajutorul clasei ObjectOutputStream care transforma un
obiect in bytes si este scris intr-un stream care se transmite la alt host (receiver).

for(Map.Entry<Socket, ObjectOutputStream> entry : receiveri.entrySet()) {


for(JsonObject strObj : jsonQueu) {
try {
entry.getValue().writeObject(strObj.toString());
System.out.println("Trimit la: " + entry.getKey().getRemoteSocketAddress());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Toti receiverii sunt pastrati intr-o mapa concurenta. Aceasta este compusa din Socket-ul conexiunii si
ObjectOtputStream-ul acestui socket.
Entry.getValue este ObjectOutputStream-ul prin care se realizeaza serializarea si se transmite la receiver.
Aceasta casa are metoda writeObject() care realizeaza acest lucru cu un obiect.

Desirealizarea este procesul prin care un stream de bytes este convertit intr-un obiect complex cum ar fi
JSON.
Obiectele ObjectOutputStream si ObjectInputStream pot sa realizeze serializarea daca obiectul transmis
poate fi serializat, de aceea la transmitere obiectul JSON se transmite ca un String.
La desirealizare acesta este primit ca un String si apoi din String este format Obiectul JSON propriu zis.
gson = new Gson();
jsonElement = gson.fromJson(objectInputStream.readObject().toString(),
JsonElement.class);
jsonObject = jsonElement.getAsJsonObject();

Apoi din acest JsonObiect se pot manipula elementele acestuia in modul urmator:
future.get().get("Sender:") + future.get().get("mesaj:"))

4) Multi Threading receivers and senders


Ficare receiver si sender care se conecteaza la Broker i se ofera un fir de executie aparte, ceea ce semnifica ca ei
sunt independent, pina la momentul cind trebuie sa proceseze vrio resursa critica.

while(true){
Socket socket = this.serverSocket.accept();
new Thread( new Broker(socket)).start();
}

Broker-ul mereu asculta si este legat de un anuit PORT, atunci cind cineva intentioneaza sa se conecteze la
portul deschis de Broker, acesta isi creeaza o instanta noua pe un fir de executie diferit.

Chiar daca pentru fiecare sender si receiver se creeaza defapt cite o instanta noua, aceasta are resursele sale
statice ceea ce inseamna ca sunt resurse ale clasei insa nu ale instantei.
private static BlockingQueue<JsonObject> jsonQueu = new
ArrayBlockingQueue<>(40);
private static Map<Socket,ObjectOutputStream> receiveri = new
ConcurrentHashMap<>();
5) Implimentarea asincronismului
Java ofera java.util.concurent.ExecutorService interfata care reprezinta un mecanizm de executie asincron care
este capabil sa execute anumite Task-uri in background.

Figura 1 Un thread delegheaza un task catre ExecutorService pentru o executie asincrona.


Exista mai multe cai de a delega task-uri pentru executii printre care:
- execute(Runnable)
- submit(Runnable)
- submit(Callable)
ExecutorService service = Executors.newSingleThreadExecutor();
Future<JsonObject> future = service.submit(new Callable<JsonObject>() {
@Override
public JsonObject call() throws Exception {
return desirealizeStringObject();
}
});
service.shutdown();
service.awaitTermination(1000, TimeUnit.MILLISECONDS);
In codul de mai sus este un exemplu de creare a unui task care executa un task pe un thread aparte si totodata
acesta datorita intefetei Callable, va fi nevoita sa astepta un raspuns de tip JsonObject.
Atunci cind cream acest serviciu putem sa instantiem cite fire de executie dorim sa execute aceasta
functionalitate. Totodata cind apelam service.shutdown() se intelege ca nici un alt thread nu mai poate
intra ca sa execute. Metoda awaitTermination() blockeaza pina cind nu sa realizat taskul sau pina cind s-
a finisat timpul prescris.

6) Pastra mesajelor si rutarea lor.


Mesajele care apar de la sender sunt stocate intr-o colectie concurenta care este sincronizata automat de Java
Virtual Machine fara implicarea programatorului ( se refera si la scriere si la citire).
private static BlockingQueue<JsonObject> jsonQueu = new
ArrayBlockingQueue<>(40);

Atunci cind are loc transmiterea mesajelor serializate ele mai intii de toate sunt scoase din aceasta coada. Apoi
obiectul este convertit in bytes si tranmis catre receiver.

class Class Model

Runnable
Broker

- bufferedReader: BufferedReader
- jsonObject: JsonObject
- jsonQueu: BlockingQueue<JsonObject> = new ArrayBlocki...
- receiveri: Map<Socket,ObjectOutputStream> = new ConcurrentH...
- socket: Socket
- toti: Map<Socket,ObjectOutputStream> = new ConcurrentH...

+ Broker(Socket)
+ checkForEmptyAndSendAsync(String): void
+ createJSON(String): void
+ ifSubscribe(String): void
+ run(): void
+ sendAndSerialize(Map<Socket,ObjectOutputStream>): void

Receiv er

- gson: Gson
Sender - jsonElement: JsonElement
- bufferedReaderFromRemote: BufferedReader = null - jsonObject: JsonObject
- printWriter: PrintWriter = null - keybordScanner: Scanner
- socket: Socket = null - objectInputStream: ObjectInputStream
- printWriter: PrintWriter
+ main(String[]): void - socket: Socket
+ sendMessages(): void
+ desirealizeStringObject(): JsonObject
1..* 1..* + getMessages(): void
+ main(String[]): void

brokerServ ice

- PORT: int = 4444 {readOnly}


~ serverSocket: ServerSocket

+ connection(): void
+ main(String[]): void

Figura 2 Diagrama de clase a componentelor participante la schimbul de mesaje.


In figura nr.2 este aratata structura fizica cit si comportamentul prin Diagrama de clase. Deci se observa
careva relatii intre aceste componente. Relatia de agregare intre componenta Broker si BrokerService
semnifica ca daca nu va exista BrokerService nu va putea exista Broker, deci acesta este dependent de
BrokerService. Dupa multiplicitatea componentelor Sender si Reveiver se poate intelege ca pot exista mai
multe instante independente la sistem.

Concluzie
Realizind acest laborator am insusit de ce este necesar ca schimbul de mesaje dintre careva componente sa
fie procesate de un agent (de mesagerie). Acesta avind mai multe benefii asupra intregii platforme precum:
- reduce cuplarea: transmitatorii comunica doar cu brokerul, astfel o potential grupare a mai
multor receptori sub un nume logic comun poate deveni transparenta transmitatorilor.
- Mareste integrabilitatea: aplicatia care comunica cu brokerul nu trebuie sa aiba aceeasi interfata,
astfel brokerul poate deveni o punte dintre aplicatii cu diferite nivele de securitate si calitate.
- Mareste evolutivitatea: brokerul protejeaza componentele de modificarile individuale ale
aplicatiilor integrate.
Totodata am implimentat ca fiecare componenta sa se execute pe un fir de executie aparte ceea ce este destul
de important pe o platforma. Realizarea asincronizmului este o parte necesara pentru a nu crea blocari in
momentul de transmitere si procesare.

Bibliografie
1. http://tutorials.jenkov.com/java-util-concurrent/executorservice.html/ Jenkov/ 02.10.2017
2. http://stackoverflow.com/questions/4110664/gson-directly-convert-string-to-jsonobject-no-pojo
08.10.2017

Vous aimerez peut-être aussi

  • Programarea in Retea Lab 3 Iepuras Daniel TI-171
    Programarea in Retea Lab 3 Iepuras Daniel TI-171
    Document8 pages
    Programarea in Retea Lab 3 Iepuras Daniel TI-171
    DanuIepuras
    Pas encore d'évaluation
  • Programarea in Retea Lab 4 Iepuras Daniel TI-171
    Programarea in Retea Lab 4 Iepuras Daniel TI-171
    Document8 pages
    Programarea in Retea Lab 4 Iepuras Daniel TI-171
    DanuIepuras
    Pas encore d'évaluation
  • Lab4 PR Adasanu Gicu
    Lab4 PR Adasanu Gicu
    Document9 pages
    Lab4 PR Adasanu Gicu
    Георгий 98
    Pas encore d'évaluation
  • Pad LP 01
    Pad LP 01
    Document7 pages
    Pad LP 01
    Andrei Guritanu
    Pas encore d'évaluation
  • Lab 2
    Lab 2
    Document6 pages
    Lab 2
    Maria Sevciuc
    Pas encore d'évaluation
  • Lab3 PR
    Lab3 PR
    Document22 pages
    Lab3 PR
    Constantin
    Pas encore d'évaluation
  • Examen TIDPP
    Examen TIDPP
    Document3 pages
    Examen TIDPP
    Rosca Doinita
    Pas encore d'évaluation
  • TMPS Proiect de Semestru
    TMPS Proiect de Semestru
    Document18 pages
    TMPS Proiect de Semestru
    Guzun Ion
    Pas encore d'évaluation
  • Lab7 IOT
    Lab7 IOT
    Document8 pages
    Lab7 IOT
    DanuIepuras
    Pas encore d'évaluation
  • Lab 7 Somipp
    Lab 7 Somipp
    Document5 pages
    Lab 7 Somipp
    Augusta Bucataru
    Pas encore d'évaluation
  • Proiect de Curs AMOO Druta
    Proiect de Curs AMOO Druta
    Document48 pages
    Proiect de Curs AMOO Druta
    nn nnn
    Pas encore d'évaluation
  • SOMIPP
     SOMIPP
    Document6 pages
    SOMIPP
    Damean Alexandra
    Pas encore d'évaluation
  • Laborator1 TMPS
    Laborator1 TMPS
    Document4 pages
    Laborator1 TMPS
    Ion Cornea
    Pas encore d'évaluation
  • Somipp Lab4
    Somipp Lab4
    Document3 pages
    Somipp Lab4
    Raducan Alina
    Pas encore d'évaluation
  • SOMIPP Lab5
    SOMIPP Lab5
    Document4 pages
    SOMIPP Lab5
    X3 KTO
    Pas encore d'évaluation
  • Examen PPe
    Examen PPe
    Document11 pages
    Examen PPe
    crismaruion
    100% (2)
  • IoT Lab1
     IoT Lab1
    Document2 pages
    IoT Lab1
    Eugenia Batrînac
    Pas encore d'évaluation
  • SOMIPPRaspunsuri
    SOMIPPRaspunsuri
    Document82 pages
    SOMIPPRaspunsuri
    Urmanschi Mihail
    Pas encore d'évaluation
  • Damean Alexandra IOT4
    Damean Alexandra IOT4
    Document9 pages
    Damean Alexandra IOT4
    Damean Alexandra
    Pas encore d'évaluation
  • PAM Lab 1
    PAM Lab 1
    Document6 pages
    PAM Lab 1
    Vladislav Crivenco
    Pas encore d'évaluation
  • Somipp Linux 4 UTM
    Somipp Linux 4 UTM
    Document4 pages
    Somipp Linux 4 UTM
    Cristi Poselețchi
    Pas encore d'évaluation
  • Examen Somipp
    Examen Somipp
    Document65 pages
    Examen Somipp
    Ana Toma
    100% (1)
  • Lab 1 Somipp
    Lab 1 Somipp
    Document7 pages
    Lab 1 Somipp
    TîmburŞtefan
    Pas encore d'évaluation
  • Proiect TMPS 2018
    Proiect TMPS 2018
    Document1 page
    Proiect TMPS 2018
    Lorena Alexandru
    Pas encore d'évaluation
  • SI Nadejda Constantinescu Lab 1
    SI Nadejda Constantinescu Lab 1
    Document7 pages
    SI Nadejda Constantinescu Lab 1
    Nadia
    Pas encore d'évaluation
  • Laborator 1 Testare Software
    Laborator 1 Testare Software
    Document8 pages
    Laborator 1 Testare Software
    Ion Cornea
    Pas encore d'évaluation
  • Lab 6 Somipp
    Lab 6 Somipp
    Document5 pages
    Lab 6 Somipp
    Augusta Bucataru
    Pas encore d'évaluation
  • PPE Lab7
    PPE Lab7
    Document14 pages
    PPE Lab7
    danielploaia
    Pas encore d'évaluation
  • Lab7 AMOO
    Lab7 AMOO
    Document11 pages
    Lab7 AMOO
    Сергей Борта
    Pas encore d'évaluation
  • Lab2 (TS)
    Lab2 (TS)
    Document7 pages
    Lab2 (TS)
    Zeul Hriscei
    Pas encore d'évaluation
  • SOMIPP Lab 5
    SOMIPP Lab 5
    Document5 pages
    SOMIPP Lab 5
    Augusta Bucataru
    Pas encore d'évaluation
  • Pam Examen
    Pam Examen
    Document7 pages
    Pam Examen
    Daniil
    Pas encore d'évaluation
  • SOMIPP Lab6
    SOMIPP Lab6
    Document4 pages
    SOMIPP Lab6
    Dan
    Pas encore d'évaluation
  • PAm Examen-1
    PAm Examen-1
    Document12 pages
    PAm Examen-1
    Eric Semeniuc
    Pas encore d'évaluation
  • Laborator NR.2
    Laborator NR.2
    Document9 pages
    Laborator NR.2
    Daniil
    Pas encore d'évaluation
  • SOMIPP7
    SOMIPP7
    Document3 pages
    SOMIPP7
    Damean Alexandra
    Pas encore d'évaluation
  • Lab 2 Pam
    Lab 2 Pam
    Document5 pages
    Lab 2 Pam
    Augusta Bucataru
    Pas encore d'évaluation
  • Lab.2. Algoritmi Simetrici de Criptare
    Lab.2. Algoritmi Simetrici de Criptare
    Document8 pages
    Lab.2. Algoritmi Simetrici de Criptare
    MihailGuvir
    Pas encore d'évaluation
  • Lab 2 Somipp
    Lab 2 Somipp
    Document5 pages
    Lab 2 Somipp
    Augusta Bucataru
    Pas encore d'évaluation
  • Lucrarea de Laborator Nr.7 ASR
    Lucrarea de Laborator Nr.7 ASR
    Document5 pages
    Lucrarea de Laborator Nr.7 ASR
    Dutca Alexandru
    Pas encore d'évaluation
  • Pad Examen
    Pad Examen
    Document7 pages
    Pad Examen
    Varvara Ciorba
    Pas encore d'évaluation
  • AMOO Lab 4
    AMOO Lab 4
    Document6 pages
    AMOO Lab 4
    Anya Mr
    Pas encore d'évaluation
  • Lab 3 AMOO
    Lab 3 AMOO
    Document9 pages
    Lab 3 AMOO
    Gheorghe Felicia
    Pas encore d'évaluation
  • Laboratorul 1 TIDPP
    Laboratorul 1 TIDPP
    Document11 pages
    Laboratorul 1 TIDPP
    Ion Popescu
    0% (1)
  • Lab.6 FC
    Lab.6 FC
    Document3 pages
    Lab.6 FC
    Cristina Florea
    Pas encore d'évaluation
  • PSI Lab 2
    PSI Lab 2
    Document13 pages
    PSI Lab 2
    Nicolae
    Pas encore d'évaluation
  • Lab 1 BD
    Lab 1 BD
    Document7 pages
    Lab 1 BD
    Augusta Bucataru
    Pas encore d'évaluation
  • Lab 1
    Lab 1
    Document22 pages
    Lab 1
    Nicoletta Ciudin
    Pas encore d'évaluation
  • Lab 2 AMOO
    Lab 2 AMOO
    Document6 pages
    Lab 2 AMOO
    Gheorghe Felicia
    Pas encore d'évaluation
  • PADExamMM (
    PADExamMM (
    Document34 pages
    PADExamMM (
    viorel amigo
    Pas encore d'évaluation
  • Iepuras Daniel Lab 1 TS
    Iepuras Daniel Lab 1 TS
    Document4 pages
    Iepuras Daniel Lab 1 TS
    DanuIepuras
    Pas encore d'évaluation
  • Damean Alexandra IOT3
    Damean Alexandra IOT3
    Document8 pages
    Damean Alexandra IOT3
    Damean Alexandra
    Pas encore d'évaluation
  • Pam Exam
    Pam Exam
    Document2 pages
    Pam Exam
    Culea Constantin
    Pas encore d'évaluation
  • Lab6 AMOO - Diagrame de Stari Si Activitati
    Lab6 AMOO - Diagrame de Stari Si Activitati
    Document10 pages
    Lab6 AMOO - Diagrame de Stari Si Activitati
    Dan
    Pas encore d'évaluation
  • PS TS
    PS TS
    Document14 pages
    PS TS
    Victor Turculet
    Pas encore d'évaluation
  • Lab 3 Somipp
    Lab 3 Somipp
    Document14 pages
    Lab 3 Somipp
    Augusta Bucataru
    Pas encore d'évaluation
  • Laborator 1 Prelucrarea Semnalelor
    Laborator 1 Prelucrarea Semnalelor
    Document19 pages
    Laborator 1 Prelucrarea Semnalelor
    Ion Cornea
    Pas encore d'évaluation
  • PAD Laborator 1
    PAD Laborator 1
    Document15 pages
    PAD Laborator 1
    Victor Negruta
    100% (1)
  • Curs 9 Java
    Curs 9 Java
    Document13 pages
    Curs 9 Java
    Alexandra Somu
    Pas encore d'évaluation
  • Lucrarea 6
    Lucrarea 6
    Document17 pages
    Lucrarea 6
    Vadim Ciubotaru
    Pas encore d'évaluation
  • 1 Etapele Dezvoltarii Software
    1 Etapele Dezvoltarii Software
    Document20 pages
    1 Etapele Dezvoltarii Software
    vasile66
    Pas encore d'évaluation
  • Biletul 2
    Biletul 2
    Document3 pages
    Biletul 2
    Alexandru Kirika
    Pas encore d'évaluation
  • Examen PAIIP
    Examen PAIIP
    Document39 pages
    Examen PAIIP
    Alexandru Kirika
    Pas encore d'évaluation
  • Raport Lab1 SI
    Raport Lab1 SI
    Document21 pages
    Raport Lab1 SI
    Alexandru Kirika
    Pas encore d'évaluation
  • Solid
    Solid
    Document8 pages
    Solid
    Alexandru Kirika
    Pas encore d'évaluation
  • Întotdeauna A Fost. Deficitul de Miez de Nucă În Europa Este de Peste 200 de Mii de Tone. Este o Pia Ă Colosală Ț
    Întotdeauna A Fost. Deficitul de Miez de Nucă În Europa Este de Peste 200 de Mii de Tone. Este o Pia Ă Colosală Ț
    Document5 pages
    Întotdeauna A Fost. Deficitul de Miez de Nucă În Europa Este de Peste 200 de Mii de Tone. Este o Pia Ă Colosală Ț
    Alexandru Kirika
    Pas encore d'évaluation
  • Amsi 1 2
    Amsi 1 2
    Document14 pages
    Amsi 1 2
    Viktor Talpa
    Pas encore d'évaluation
  • TVPP1
    TVPP1
    Document7 pages
    TVPP1
    Alexandru Kirika
    Pas encore d'évaluation
  • Aaa BDC Lab4a
    Aaa BDC Lab4a
    Document13 pages
    Aaa BDC Lab4a
    Alexandru Kirika
    Pas encore d'évaluation
  • Testarea de Acceptare
    Testarea de Acceptare
    Document6 pages
    Testarea de Acceptare
    Alexandru Kirika
    Pas encore d'évaluation
  • La La La
    La La La
    Document22 pages
    La La La
    Alexandru Kirika
    Pas encore d'évaluation
  • Elect Lab1
    Elect Lab1
    Document6 pages
    Elect Lab1
    Alexandru Kirika
    Pas encore d'évaluation
  • Laborator 2
    Laborator 2
    Document18 pages
    Laborator 2
    Alexandru Kirika
    Pas encore d'évaluation