From 236e74221b11093e6c8ca6e9aad69756f1a85ae1 Mon Sep 17 00:00:00 2001 From: Rochas Date: Sat, 26 Apr 2025 14:21:34 +0200 Subject: [PATCH] =?UTF-8?q?read=20me=20termin=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 381 ++++++++++++++---- src/main/java/fr/istic/chat/chat.java | 36 -- src/main/java/fr/istic/chat/clientChat.java | 38 +- src/main/java/fr/istic/chat/espion.java | 2 +- src/main/java/fr/istic/date/EnvoyerDate.java | 11 +- .../java/fr/istic/date/lb/EnvoyerDate.java | 8 +- 6 files changed, 336 insertions(+), 140 deletions(-) delete mode 100644 src/main/java/fr/istic/chat/chat.java diff --git a/README.md b/README.md index 15dd055..73680c9 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,13 @@ # Squelette du TP -## Utilisation - -Pour utiliser ce tp vous devez : - -1. le forker via le lien fork ci-dessus. -2. Votre repository doit être **privé**. Vous devez le partager avec votre encadrant de TP. -3. vous obtiendrez un nouveau lien : par exemple git@gitlab.istic.univ-rennes1.fr:monpseudo/.... -4. Dans le **workspace d'eclipse** faites `git clone git@gitlab.istic.univ-rennes1.fr:monpseudo/...` avec l'url précédente. -5. Ouvrez le workspace dans eclipse. -6. Utilisez Import> "Existing Maven Projects". -7. Selectionnez le projet et validez. - -Vous devriez avoir une version du projet dans votre propre compte gitlab. - -Vous pouvez le partager avec votre binome et l'encadrant de TP. - - ## Rapport -Votre rapport doit être écrit ici en markdown. :/ -Vous trouverez la syntaxe de markdown ici : https://docs.gitlab.com/ee/user/markdown.html -Placez vos images dans le répertoire images si nécessaire. - ### Binôme : Thibaut ROCHAS, Tuan Minh VU ### Introduction -On a utilisé CloudAMQP, qui semblait être la solution la plus simple pour commencer le TP rapidement. +On a utilisé CloudAMQP, qui semblait être la solution la plus meilleur solution pour commencer le TP rapidement. Les exemples ont tous été testés, avec notre serveur RabitMQ. Avec l’aide des exemples et du cours, on a pu faire la partie Date sans grande difficulté. Ensuite, le chat n’était pas très compliqué, on a fait le bonus espion. @@ -36,78 +15,316 @@ Ensuite, le chat n’était pas très compliqué, on a fait le bonus espion. ### Déroulement du TP #### Exemples -Pour les exemples il suffisait simplement de remplacer "localhost" dans le setHost du ConnectionFactory par l’URL de notre serveur RabbitMQ. - -Le premier exemple envoie juste un seul message "Hello World", et on enregistre dans le receveur une action à effectuer à chaque message, ici il affiche simplement le message. - -Sur le 2ème exemple, l’envoyeur NewTask prend ces arguments, les concatène en un message qu’il envoie au worker, qui va effectuer une action à chaque message reçu : il affiche le message puis attend 1 seconde pour chaque point dans le message reçu, et affiche "done" quand il a fini. - -L’exemple 3 prend encore des arguments, il envoie à tous les Receveurs car le type d’échange est "fanout", ici le receveur affiche simplement le message. - -Dans l’exemple 4, on utilise le type d’échange "direct", avec des topics, il faut donc aussi fournir le topic en argument en plus du message pour l’envoyeur, et le receveur on lui fournit les topics qu’il doit s’abonner. - -L’exemple 5 fait la même chose que le 4, mais avec un type d’échange "topic", il y a donc une hiérarchie dans les topics. -Le dernier exemple est une communication RPC, le client envoie un message et le serveur répond en fonction de ce message. +Pour les exemples il suffisait simplement de remplacer "localhost" dans le setHost du ConnectionFactory par l’URL de notre serveur RabbitMQ.
+
+Le premier exemple envoie juste un seul message "Hello World", et on enregistre dans le receveur une action à effectuer à chaque message, ici il affiche simplement le message.
+
+Sur le 2ème exemple, l’envoyeur NewTask prend ces arguments, les concatène en un message qu’il envoie au worker, qui va effectuer une action à chaque message reçu : il affiche le message puis attend 1 seconde pour chaque point dans le message reçu, et affiche "done" quand il a fini.
+
+L’exemple 3 prend encore des arguments, il envoie à tous les Receveurs car le type d’échange est "fanout", ici le receveur affiche simplement le message.
+
+Dans l’exemple 4, on utilise le type d’échange "direct", avec des topics, il faut donc aussi fournir le topic en argument en plus du message pour l’envoyeur, et le receveur on lui fournit les topics qu’il doit s’abonner.
+
+L’exemple 5 fait la même chose que le 4, mais avec un type d’échange "topic", il y a donc une hiérarchie dans les topics.
+Le dernier exemple est une communication RPC, le client envoie un message et le serveur répond en fonction de ce message.
#### Date -A partir de l'exemple 3, on envoi simpelment la date, avec le même échange de type fanout. Pour généré la date on fait simplement une fonction getDate() qui return (new Date()).toString(); -Le reste est identique à tuto3.java -Chaque client reçoivent le message du serveur +À partir de l'exemple 3, on envoie simplement la date, avec le même échange de type fanout. Pour générer la date, on fait simplement une fonction getDate() qui retourne (new Date()).toString();
+Le reste est identique à tuto3.java.
+Chaque client reçoit le message du serveur correctement.
+
+Pour tester on a executé un EnvoyerDate, et 2 RecevoirDate : + + + + + + + + + + + + + + + +
EnvoyerDateRecevoirDate (1)RecevoirDate (2)
+ [x] Sent 'Sat Apr 26 10:06:24 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:25 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:26 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:27 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:28 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:29 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:30 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:31 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:06:32 CEST 2025' +
+ [x] Received 'Sat Apr 26 10:06:24 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:25 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:26 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:27 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:28 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:29 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:30 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:31 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:32 CEST 2025' +
+ [x] Received 'Sat Apr 26 10:06:24 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:25 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:26 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:27 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:28 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:29 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:30 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:31 CEST 2025'
+ [x] Received 'Sat Apr 26 10:06:32 CEST 2025' +
-Pour la version de partages d'un même fil, c'est la même chose que la version précédente mais cette fois si un seul client reçoi le message, tout les client de recoivent donc pas tout les message, chaque message sont unique -![img Date ld](images/DateLD.png) +##### Date Partage d’une même file +Pour la version de partages d'un même fil, c'est la même chose que la version précédente mais cette fois si un seul client reçoit le message, tous les clients ne reçoivent donc pas tous les messages, chaque message est unique.
+
+Pour tester on a executé un EnvoyerDate, et 2 RecevoirDate pour vérifier que chaque message n'est reçu que par un seul client : + + + + + + + + + + + + + + + +
EnvoyerDateRecevoirDate (1)RecevoirDate (2)
+ [x] Sent 'Sat Apr 26 10:21:46 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:47 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:48 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:49 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:50 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:51 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:52 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:53 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:54 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:55 CEST 2025'
+ [x] Sent 'Sat Apr 26 10:21:56 CEST 2025' +
+ [x] Received 'Sat Apr 26 10:21:46 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:48 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:50 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:52 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:54 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:56 CEST 2025' +
+ [x] Received 'Sat Apr 26 10:21:47 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:49 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:51 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:53 CEST 2025'
+ [x] Received 'Sat Apr 26 10:21:55 CEST 2025' +
+On peut donc bien voir que les messages sont partagés entre les clients +##### Date Routage simple + +Dans cette version, on peut choisir une clef de routage, dans dateRoot on a donc la clef "local" et la clef "GMT" dans EnvoyerDate on envoie donc avec ses clefs respectivement, la date locale (la même que précédement), et la date GMT (la même chose mais juste a remplaçant .toString() à .toGMTString() ). On a maintenant deux receveurs, RecvoirDate, qui s'abonne à la clef "local" et RecevoirGMT qui s'abonne à la clef "GMT".
+
+On lance chaque Class : + + + + + + + + + + + + + + + +
EnvoyerDateRecevoirDateRecevoirDateGMT
+ [x] Sent 'Sat Apr 26 10:46:56 CEST 2025'
+ [x] Sent '26 Apr 2025 08:46:56 GMT'
+ [x] Sent 'Sat Apr 26 10:46:57 CEST 2025'
+ [x] Sent '26 Apr 2025 08:46:57 GMT'
+ [x] Sent 'Sat Apr 26 10:46:58 CEST 2025'
+ [x] Sent '26 Apr 2025 08:46:58 GMT'
+ [x] Sent 'Sat Apr 26 10:46:59 CEST 2025'
+ [x] Sent '26 Apr 2025 08:46:59 GMT'
+ [x] Sent 'Sat Apr 26 10:47:00 CEST 2025'
+ [x] Sent '26 Apr 2025 08:47:00 GMT'
+ [x] Sent 'Sat Apr 26 10:47:01 CEST 2025'
+ [x] Sent '26 Apr 2025 08:47:01 GMT'
+ [x] Sent 'Sat Apr 26 10:47:03 CEST 2025' + [x] Sent '26 Apr 2025 08:47:03 GMT' +
+ [x] Received 'Sat Apr 26 10:46:56 CEST 2025'
+ [x] Received 'Sat Apr 26 10:46:57 CEST 2025'
+ [x] Received 'Sat Apr 26 10:46:58 CEST 2025'
+ [x] Received 'Sat Apr 26 10:46:59 CEST 2025'
+ [x] Received 'Sat Apr 26 10:47:00 CEST 2025'
+ [x] Received 'Sat Apr 26 10:47:01 CEST 2025'
+ [x] Received 'Sat Apr 26 10:47:03 CEST 2025' +
+ [x] Received '26 Apr 2025 08:46:56 GMT'
+ [x] Received '26 Apr 2025 08:46:57 GMT'
+ [x] Received '26 Apr 2025 08:46:58 GMT'
+ [x] Received '26 Apr 2025 08:46:59 GMT'
+ [x] Received '26 Apr 2025 08:47:00 GMT'
+ [x] Received '26 Apr 2025 08:47:01 GMT'
+ [x] Received '26 Apr 2025 08:47:03 GMT' +
+La Class Recevoir reçoit bien uniquement les dates locales et RecevoirDateGMT les dates GMT + +##### Date Routage par Topic + +On utilise maintenant des topics, tout comme le Routage précédent on peut s'abonner à des clef, mais dans ce cas là, ce sont des chemain, par exemple au lieu d'uniquement "local" et "GMT" c'est "date.local" et "date.GMT", cette fois si les deux topic on un point commu dans leur chemain, il et donc possible de s'abonner uniquement à "local", uniquement à "GMT" ou à toutes les dates avec "date.#".
+
+Encore une fois on lance chaque Class : + + + + + + + + + + + + + + + + + +
EnvoyerDateRecevoirDateRecevoirDateGMTRecevoirToutesDates
+ [x] Sent 'Sat Apr 26 10:54:08 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:08 GMT'
+ [x] Sent 'Sat Apr 26 10:54:09 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:09 GMT'
+ [x] Sent 'Sat Apr 26 10:54:10 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:10 GMT'
+ [x] Sent 'Sat Apr 26 10:54:11 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:11 GMT'
+ [x] Sent 'Sat Apr 26 10:54:12 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:12 GMT'
+ [x] Sent 'Sat Apr 26 10:54:13 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:13 GMT'
+ [x] Sent 'Sat Apr 26 10:54:14 CEST 2025'
+ [x] Sent '26 Apr 2025 08:54:14 GMT' +
+ [x] Received 'Sat Apr 26 10:54:08 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:09 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:10 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:11 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:12 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:13 CEST 2025'
+ [x] Received 'Sat Apr 26 10:54:14 CEST 2025' +
+ [x] Received '26 Apr 2025 08:54:08 GMT'
+ [x] Received '26 Apr 2025 08:54:09 GMT'
+ [x] Received '26 Apr 2025 08:54:10 GMT'
+ [x] Received '26 Apr 2025 08:54:11 GMT'
+ [x] Received '26 Apr 2025 08:54:12 GMT'
+ [x] Received '26 Apr 2025 08:54:13 GMT'
+ [x] Received '26 Apr 2025 08:54:14 GMT' +
+ [x] Received 'Sat Apr 26 10:54:08 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:08 GMT'
+ [x] Received 'Sat Apr 26 10:54:09 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:09 GMT'
+ [x] Received 'Sat Apr 26 10:54:10 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:10 GMT'
+ [x] Received 'Sat Apr 26 10:54:11 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:11 GMT'
+ [x] Received 'Sat Apr 26 10:54:12 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:12 GMT'
+ [x] Received 'Sat Apr 26 10:54:13 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:13 GMT'
+ [x] Received 'Sat Apr 26 10:54:14 CEST 2025'
+ [x] Received '26 Apr 2025 08:54:14 GMT' +
+RecevoirTouesDates reçoit toutes les dates comme convenu, RecevoirDate uniquement les dates locales et RecevoirDateGMT les dates GMT. #### Chat +Ce chat utilise des topics, on pourra donc y avoir des canaux, où les clients pourront s'abonner.
+
+En s'abonnant à un canal, le client reçoit donc uniquement les messages liés à ce canal, et envoie des messages dans ce canal. +Le client commence par s'abonner au canal choisi (en 1er argument, ou "#" (tous les canaux) si pas d'argument et dans 2ème argument on peut aussi mettre un nom d'utilisateur, String random sinon), puis on entre dans la boucle pour envoyer les messages, on utilise simplement un scanner.
+
+Pour que les utilisateurs puissent s'identifier entre eux, on intègre le nom d'utilisateur dans le header des Properties de chaque message, avec la clef "sender". Le receveur doit également connaître de quel canal vient le message (pas forcément le même que lui-même dans le cas, par exemple, où l'on utilise "#") - -## Faire des diagrammes - -En particulier vous pouvez utiliser [mermaid](https://mermaidjs.github.io/) : - - - -```mermaid -sequenceDiagram - participant Alice - participant Bob - Alice->John: Hello John, how are you? - loop Healthcheck - John->John: Fight against hypochondria - end - Note right of John: Rational thoughts
prevail... - John-->Alice: Great! - John->Bob: How about you? - Bob-->John: Jolly good! -``` - -## Insérer du code - -Insérer du `code` : - +Envois d'un message : ```java -public interface ClientHandler { - public void handle(); -} +Map headers = new HashMap<>(); +headers.put("sender", name); +AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().headers(headers).build(); +``` +Reception d'un message : +```java +Object senderName = (delivery.getProperties().getHeaders().get("sender")); +String routing = delivery.getEnvelope().getRoutingKey(); ``` -et des résultats : - -```bash -[yo@capybara dkgr]$ nc google.fr 80 -PWET / -HTTP/1.0 400 Bad Request -Content-Type: text/html; charset=UTF-8 -Referrer-Policy: no-referrer -Content-Length: 1555 -Date: Mon, 21 Jan 2019 12:18:02 GMT - - - - -``` +Pour le test, on va faire deux utilisateurs dans le même canal : Alice et Bob, un dans un canal voisin : Charlie, et un dans le canal parent aux deux précédents : David, et enfin l'Espion qui peut voir tous les canaux :
+(ordre des messages : Alice "Bonjour" , Bob "Salut" , David "Hello" , Charlie "je suis tout seul ?") + + + + + + + + + + + + + + + + + + + +
ClientChat main.salon1 AliceClientChat main.salon1 BobClientChat main.salon2 ChalieClientChat main.# DavidEspion
+ [*] Waiting for messages. To exit press CTRL+C
+ Bonjour
+ main.salon1#Alice>Bonjour
+ main.salon1#Bob>Salut +
+ [*] Waiting for messages. To exit press CTRL+C
+ main.salon1#Alice>Bonjour
+ Salut
+ main.salon1#Bob>Salut +
+ [*] Waiting for messages. To exit press CTRL+C
+ je suis seul ?
+ main.salon2#Charlie>je suis seul ? +
+ [*] Waiting for messages. To exit press CTRL+C
+ main.salon1#Alice>Bonjour
+ main.salon1#Bob>Salut
+ hello
+ main.##David>hello
+ main.salon2#Charlie>je suis seul ? +
+ [*] Waiting for messages. To exit press CTRL+C
+ main.salon1#Alice>Bonjour
+ main.salon1#Bob>Salut
+ main.##David>hello
+ main.salon2#Charlie>je suis seul ? +
+L'Espion voit tous les messages comme prévu, David (main.#) peut lire tous les messages de Alice, Bob et Charlie (et les siens). Alice et Bob voient uniquement les messages de main.salon1, et Charlie ne voit aucun autre message que le sien car il est seul dans le main.salon2. \ No newline at end of file diff --git a/src/main/java/fr/istic/chat/chat.java b/src/main/java/fr/istic/chat/chat.java deleted file mode 100644 index 46c2d53..0000000 --- a/src/main/java/fr/istic/chat/chat.java +++ /dev/null @@ -1,36 +0,0 @@ -package fr.istic.chat; - -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.DeliverCallback; - -public class chat { - private static final String EXCHANGE_NAME = "topic_log"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - - String message = ""; - - if(false){ - channel.basicPublish(EXCHANGE_NAME, argv[0], null, message.getBytes("UTF-8")); - } - - String queueName = channel.queueDeclare().getQueue(); - - DeliverCallback deliverCallback = (consumerTag, delivery) -> { - String message2 = new String(delivery.getBody(), "UTF-8"); - System.out.println(" [x] Received '" + message2 + "'"); - }; - channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { - }); - - - - } -} diff --git a/src/main/java/fr/istic/chat/clientChat.java b/src/main/java/fr/istic/chat/clientChat.java index 0b450df..2564d99 100644 --- a/src/main/java/fr/istic/chat/clientChat.java +++ b/src/main/java/fr/istic/chat/clientChat.java @@ -3,6 +3,7 @@ package fr.istic.chat; import java.util.HashMap; import java.util.Map; +import java.util.Random; import java.util.Scanner; import com.rabbitmq.client.AMQP; @@ -13,13 +14,26 @@ import com.rabbitmq.client.DeliverCallback; /* * & 'C:\Program Files\Java\jre1.8.0_431\bin\java.exe' '-cp' 'C:\Users\Thibaut\AppData\Local\Temp\cp_223j5v7zmzailham0c6y3u9rd.jar' 'fr.istic.chat.clientChat' sujet.test A */ -public class clientChat { +public class ClientChat { private static final String EXCHANGE_NAME = "chat"; - - public static void main(String[] argv) throws Exception { - String canal = argv[0]; - String name = argv[1]; + public static void main(String[] argv) throws Exception { + String canal =""; + String name = ""; + switch(argv.length){ + case 0 : + canal = "#"; + name = getRandomID(6); + break; + case 1 : + canal = argv[0]; + name = getRandomID(6); + break; + default: + canal = argv[0]; + name = argv[1]; + } + System.out.println("canal : " + canal); System.out.println("name : " + name); @@ -65,7 +79,6 @@ public class clientChat { test = message.compareTo("\\exit")!=0; if(test){ channel.basicPublish(EXCHANGE_NAME, canal, props, message.getBytes("UTF-8")); - //System.out.println("<- ["+name+"](vous) : "+"'" + message + "'"); } } channel.close(); @@ -73,4 +86,17 @@ public class clientChat { scanner.close(); System.out.println("exit"); } + + private static String getRandomID(int length){ + String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + Random random = new Random(); + String str = ""; + + for (int i = 0; i < length; i++) { + int index = random.nextInt(characters.length()); + str += characters.charAt(index); + } + + return str; + } } diff --git a/src/main/java/fr/istic/chat/espion.java b/src/main/java/fr/istic/chat/espion.java index 869bc82..845c758 100644 --- a/src/main/java/fr/istic/chat/espion.java +++ b/src/main/java/fr/istic/chat/espion.java @@ -5,7 +5,7 @@ import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback; -public class espion { +public class Espion { private static final String EXCHANGE_NAME = "chat"; public static void main(String[] argv) throws Exception { diff --git a/src/main/java/fr/istic/date/EnvoyerDate.java b/src/main/java/fr/istic/date/EnvoyerDate.java index 366bac0..089b026 100644 --- a/src/main/java/fr/istic/date/EnvoyerDate.java +++ b/src/main/java/fr/istic/date/EnvoyerDate.java @@ -15,21 +15,16 @@ public class EnvoyerDate { factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { - while(true){ - channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); - + while(true){ String message = argv.length < 1 ? getDate() : String.join(" ", argv); channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); System.out.println(" [x] Sent '" + message + "'"); - try { - Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) - } catch (InterruptedException e) { - e.printStackTrace(); - } + Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) + } } } diff --git a/src/main/java/fr/istic/date/lb/EnvoyerDate.java b/src/main/java/fr/istic/date/lb/EnvoyerDate.java index 9c7292b..b5785cc 100644 --- a/src/main/java/fr/istic/date/lb/EnvoyerDate.java +++ b/src/main/java/fr/istic/date/lb/EnvoyerDate.java @@ -18,20 +18,14 @@ public class EnvoyerDate { Channel channel = connection.createChannel()) { channel.queueDeclare(EXCHANGE_NAME, false, false, false, null); - while(true){ - String message = argv.length < 1 ? getDate() : String.join(" ", argv); channel.basicPublish("",EXCHANGE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes("UTF-8")); System.out.println(" [x] Sent '" + message + "'"); - try { - Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) - } catch (InterruptedException e) { - e.printStackTrace(); - } + Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) } } }