0% au considerat acest document util (0 voturi)
176 vizualizări7 pagini

Pad LP 01

Documentul prezintă implementarea unui sistem de mesagerie instantanee care utilizează un broker pentru comunicarea între utilizatori. Sistemul stochează mesajele și datele utilizatorilor într-o bază de date MongoDB. Broker-ul implementează șapte șabloane de mesagerie precum publicare-abonare și rutare bazată pe conținut.

Încărcat de

Andrei Guritanu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
176 vizualizări7 pagini

Pad LP 01

Documentul prezintă implementarea unui sistem de mesagerie instantanee care utilizează un broker pentru comunicarea între utilizatori. Sistemul stochează mesajele și datele utilizatorilor într-o bază de date MongoDB. Broker-ul implementează șapte șabloane de mesagerie precum publicare-abonare și rutare bazată pe conținut.

Încărcat de

Andrei Guritanu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Automatic i Tehnologii Informaionale

RAPORT
Lucrare de laborator Nr.1
la disciplina Programarea Aplicaiilor Distribuite
Tema: Agent de mesagerie Message Broker

A efectuat:

st. gr. SI-121


A. Gurianu

A verificat:

lect. univ.
[Link]

Chiinu 2015

Scopul lucrrii: integrarea bazat pe ageni de mesaje care ar permite o comunicare asincron dintre
componentele distribuite ale unui sistem.
Sarcina lucrrii:
Considernd brokerul o form generalizat a medierii dintre componentele distribuite, se propune
implementri ale rutrii sau construirii de mesaje n conformitate cu abloanele menionate de
Gregor Hohpe n [3], care sunt grupate n cteva seciuni:
a. Messaging Systems,
b. Messaging Channels,
c. Message Constructions,
d. Message Routing,
e. Message Transformation,
f. Messaging endpoints,
g. System management.
Implementare:
La efectuarea acestului laborator, am implementat un sistem de tip mesagerie instantanee. Sistemul
are urmatoarea structur:
Aplicaia Web

Repositories

Domain Models

Services

Infrastructure

Broker

MongoDB

Fig.1 Structura sistemului


1. Message Channel (Messaging Systems)
n cadrul sistemului aplicaiile web comunic cu Broker-ul. Broker-ul poate primit mesaje de la
utilizatori i transmite mesaje destinatarilor, astfel el reprezint un mediator ntre diferii utilizatori ai
sistemului.
2. Message Translator (Messaging Systems)
n cadrul sistemului se efectuiaz translarea mesajelor. Broker-ul primete/transmite mesaje de tip
Json i le salveaz n baza de date n formatul Bson, specific SGBD MongoDB.
3. Publish-Subscribe Channel (Messaging Channels)
Utilizatorii sunt notificai despre mesajele noi pe care le primesc de la ali utilizatori, precum i
notificai despre faptul, c au cereri de prietenie din partea altor utilizatori.
4. Dead Letter Channel (Messaging Channels)
Toate mesajele din cadrul sistemului, precum i cererile de prietenie sunt salvate n baza de date,
respectiv n cadrul sistemului nu exist pierderi de mesaje.
5. Correlation Identifier (Message Construction)

Utiliznd numele de utilizator n cadrul sistemului, entitile sunt identificate. Atunci cnd utilizatorii
se autentific, acetea sunt salvai ntro colecie special de date, care conine att numele ct i id-ul de
conexiune din cadrul Hub-ului.
6. Content-Based Router (Message Routing)
n dependen de cmpul mesajului ConectionID, mesajul poate fi transmis ctre un unic utilizator
i salvat n baza de date sau transmis tuturor utilizatorilor online.
7. Content Enricher (Message Transformation)
La autentificarea n sistem, utilizatorilor le sunt transmise datele privind lista de prieteni i mai apoi
doar sunt transmise, la dorin i mesajele din conversaia dorit.
Codul surs BrokerHub:
using
using
using
using
using
using
using
using
using
using
using

System;
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];

namespace Broker
{
[HubName("brokerHub")]
public class BrokerHub : Hub
{
private readonly [Link] userManager;
private readonly [Link]
authenticationManager;
private readonly [Link] activeUserManager;
private readonly [Link] friendRequestManager;
private readonly [Link] conversationManager;
public BrokerHub()
{
userManager = new [Link]();
authenticationManager = new [Link]();
activeUserManager = new [Link]();
friendRequestManager = new [Link]();
conversationManager = new [Link]();
}
public void Send(ChatMessage message)
{
if ([Link] == null)
{
[Link]([Link], [Link]);
}
else
{
[Link]([Link], new Message
{
Sender = [Link],
Text = [Link]
});
ActiveUser user = [Link]([Link]);
if (user != null)
{
[Link]([Link]).addMessage([Link], [Link],
[Link]);

[Link]([Link], [Link], [Link]);


}
}
}
public void GetFriendsList(string user)
{
[Link]();
}
public void AddFriend(FriendRequest request)
{
if ([Link] == [Link])
{
[Link](request);
ActiveUser user = [Link]([Link]);
if (user != null)
{
[Link]([Link]).recievePendingUsersList( new
FriendRequest[]{request});
}
}
else
{
[Link](request);
Friend friend = new Friend()
{
Name = [Link],
ConversationID = [Link]()
};
[Link]([Link], friend);
[Link]([Link], new Friend
{
ConversationID = [Link],
Name = [Link]
});
[Link](new Conversation
{
ID = [Link]
});
}
}
public void LogIn(string user, string password)
{
bool isValidUser = [Link](new UserCredentials
{
UserName = user,
Password = password
});
if (isValidUser)
{
[Link]([Link](user));
[Link](new [Link]()
{
UserName = user,
ConnectionID = [Link]
});

[Link]([Link](user).ToArray());
}
}
public void LogOut(string user)
{
[Link](user);
}
public void Register(User user)
{
[Link](user);
}
public void SearchUsers(string key)
{
User[] users = [Link](key);
ActiveUser currentUser = [Link]([Link]);
[Link]([Link](x => [Link] != [Link]));
}
public void GetMessages(Guid conversationID, int messageNumber)
{
List<Message> messages = [Link](conversationID, messageNumber);
[Link](conversationID, messages);
}
public override [Link] OnDisconnected(bool stopCalled)
{
ActiveUser user = [Link]([Link]);
[Link]([Link]);
return [Link](stopCalled);
}
}
}

Rezultatele afirii:

Fig.2 Pagina de autentificare

Fig.3 Pagina cu mesaje

Fig.4 Pagina de adugare a prietenilor

Concluzie:
n urma efecturii aceste lucrri de laborator am implementat un Broker, care
are funcia de asigurare a comunicaiei ntre utilizatorii sistemului. Am utilizat o baz de date
MongoDB pentru a stoca datele persistent n formatul de date Bson. Am implementat toate 7
abloane enumerate n condiie.

Bibliografie:
1. Sean Chambers, Simone Chimoretta, 31 days refactoring [ Resurs electronic].-Regim de acces:
[Link]
2. Tony Northgroup, [Link] Framework Application Development Foundation 2nd edition ,
Library of Congress Control Number: 2008935429;
3. Kristina Cbodorow, 50 Tips & tricks for MongoDB Developers,
ISBM: 978-1-449-30461-4;
4. [Link] - maparea
utilizatorilor la conexiunile existente cu pstrare persistent.

S-ar putea să vă placă și