domenica 28 ottobre 2018

Comunicazione tra MicroServices in Spring Boot con RabbitMQ


Dopo attenta lettura di documentazione on-line e suggerimenti da amici provo ad eseguire qualche test di comunicazione tra Micro Services utilizzando un gestore di code di messaggi RabbitMQ.

Con una semplice app in Spring Boot, con interfaccia rest,  al richiamo di una path, viene spedito un messaggio al RabbitMQ installato sullo stesso PC in locale.

Per RabbitMQ vi consiglio vivamente di installare il plugin per il management da web

 http://localhost:15672/ guest/guest.





La parte di controller è molto semplice, è un api rest che quando viene richiamata spedisce un messaggio al RabbitMQ e nella stessa classe un metodo che rimane in ascolto sulla stessa coda.


Adesso eseguiamo alcuni stress test:

  1.  creiamo diversi file di configurazione di spring per ogni file cambiamo semplicemente la porta.
  2. eseguiamo la build del progetto e lanciamo n jar per ogni profiles creato nel file di configurazione yaml.

java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9001
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9002
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9003
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9004


il vostro desktop diventa qualcosa di delirante...

3. Configuro il jMeter per iniziare ad eseguire chiamate sui quattro server 
http://localhost:900{1-4}/sendMessage


C:\dev\apache-jmeter-5.0\bin> .\jmeter -n -t .\sendmessage.jmx -l tmp\jmeter-o.log -o tmp\dashboard

il file sendmessage.jmx



Client web di RabbitMQ



Riassumendo con jMeter abbiamo spedito 48000 richiese di invio di messaggi alle 4 app Spring Boot.
Le app hanno inviato una richiesta in coda al RabbitMQ che a sua volta per ognuno dei suddetti ha reinviato il messaggio alle 4 app.

In ingresso ha processato 48000 messaggi.
In uscita ha processato 192000 messaggi.
Tutto questo in 1 minuto.


martedì 9 ottobre 2018

Nginx, Angular 6 e FontAwesome 4.7 - Problemi Url

I Modulo npm dei FontAwesome 4.7.0 in Angular aggiunge alla path chiamante del file css l'estensione con la versione:

es: http://xxx.xxx.xx/static/fontawesome-webfont.af7ae505a9eed503f8b8.woff2?v=4.7.0

Nginx non accetta di default la tipologia di file, quindi è necessario modificare il file mime.types, aggiungendo le seguenti tipologie:

application/x-font-ttf ttc ttf;
application/x-font-otf otf;
application/font-woff  woff;
application/font-woff2 woff2;
application/vnd.ms-fontobject eot;

Questa cosa causa nella risposta standard del browser un errore OTP, a questo punto è necessario inserire un regola di rewrite su Nginx per eliminare la parte di estensione non prevista ?v=4.7.0

    location /static/ {
         alias  /opt/static/html/;
         index index.html;

        if ($request_uri ~* ^.+\.(woff2|otf|woff|tff)\?v=(.*)$){
             rewrite ^(.*)$ $uri? permanent;
         }
         try_files $uri$args $uri$args/ $uri/ /index.html =404;
         error_log /var/log/nginx/static_error.log;
         access_log /var/log/nginx/static_access.log;
     }

Esempio completo:

venerdì 5 ottobre 2018

Jasper Report - Report senza query ma solo con params

Il problema nascosto di jasper report è la possibilità di creare un report (con il vecchio iReport) senza dati al suo interno, semplicemente un documento a cui passo un oggetto java e poi elaboro, magari un DTO proveniente da elaborazione di una chiamata API rest o simili.

Il documento non viene generato via java, perché?

E' necessario aggiungere all'XML di jasper una attributo nel ramo principale del file:

<jasperReport ........  whenNoDataType="AllSectionsNoDetail">

a questo punto il report viene correttamente interpretato e renderizzato via java

JasperReport versione 6.1.1



giovedì 4 ottobre 2018

Maven - pacchetti danneggiati

Alle volte capita di avere problemi con il deploy di alcune applicazioni legate alle dipendenze maven causate da file corrotti durante lo scaricamento automatico.

Per risolvere questo problema basta ricercare nella cartella di scaricamento dei pacchetti (solitamente la .m2  nella cartella di windows %userprofile%\.m2)  tutti i file "*-sha1-in" e procedere all'eliminazione della cartella padre.

Eseguire da Eclipse un clean ed un maven update.


[grazie a Domenico]