[RASSUS] 3. laboratorijska vježba - 2021/2022
RogerRoger
huba buba ovo je točno. Agregator komunicira s konfiguracijskim serverom.
Temperature i humidity mikroservisi šalju podatke kakvi su u fajlu, agregator radi pretvorbu mjerne jedinice ako je potrebno i zato jedino njemu treba konfiguracija.
WickyWinslow
RogerRoger U ovome se kontekstu pise iskljucivo za funkcionalnost pretvordbe mjernih jedinica moja je interpretacija da to ne znaci ostali ne trebaju biti. Na predavanjima su kao sto sam rekao spomenuli slucaj da eureka cita konfiguraciju sa config servera i da je bilo puno problema i pitanja vezano za njihovo zajednicko pokretanje. Najbolje sluzbeno pitati za odgovor izgleda. Mozda nije potrebno ali better safe then sorry.
RogerRoger
WickyWinslow ideja je da je jedino agregacijski mikroservis “vidljiv” korisniku. Jedino se on konfigurira, čak ni Eureka ne bi trebala (ali može) imati veze s config serverom.
Ovo je službeni odgovor asistenta, ovako je labos zamišljen, samo su upute to nedovoljno definirale. Nije minus ako povežeš i ostale mikroservise, ali izvorna ideja je da je samo agregacijski servis config klijent.
Cvija
Zapeo sam na dijelu s mikroservisom za agregaciju, imam osjećaj da to ne bi trebalo biti jako teško, ali može li me netko uputiti na neku dokumentaciju kako to napraviti ili reći na koji način to napraviti?
Napravio sam servise za temperaturu i vlažnost i oni na GET “/temperature” i GET"/humidity" daju jednu vrijednost za temperaturu, odnosno vlažnost
Jasno mi je da aggregate servis treba poslati GET na /temperature i GET na /humidity, ali ne znam kako to napraviti
WickyWinslow
Cvija Ovo bi ti trebalo pomoci https://www.baeldung.com/rest-template
tata
kak da untar aggregator controllera procitam ovaj unit?
kad odem na http://localhost:8083/application/default ovo vidim:
Ovo mi je radilo kad sam citao iz application.properties (onaj dio bez Config servera):
@Value(“${unit}”)
private String unit;
Gussy
NISAM ASISTENT ako ti je taj application file onaj sta treba biti na config serveru, onda ga moras nazvati aggregator.yml/aggregator.properties, ako si nazva application aggregator, onda ce ti on automatski citati config file sa njegovim imenom sa servera
tata
tj radi mi, ali moram zaustavit mikroservis i ponovno pokrenut (iako imam onaj refreshScope)
RogerRoger
NISAM ASISTENT stavi @RefreshScope iznad headera klase koja vuče tu vrijednost. Ne bi trebalo praviti razliku, ali meni je proradilo kad sam ga stavio iznad imena, a ispod anotacije @Service.
Osim toga, trebaš dodati Spring Boot Actuator u dependencye, a u application.yml servisa za koji želiš da se osvježava stavi i management:
. Ni nakon ovoga ti se neće samo osvježavati, nego nakon svake promjene vrijednosti u repozitoriju moraš poslati prazni POST request na
endpoints:
web:
exposure:
include: refreshhttp://<adresa-mikroservisa>:<port>/actuator/refresh
, a kao odgovor bi trebao dobiti imena vrijednosti koje su se promijenile. Ovo napraviš npr. koristeći Postman.
Gussy
u onoj njihovoj strukturi direktorija, jel onaj config samo predstavlja onaj git repozitorij ili sto bi to trebalo biti?
Erpeg
laranotreallycroft
meni to ne radi, probao sam nacin pod 2 i 3
za oboje mi baca ovaj eror
java.io.FileNotFoundException: class path resource [readings.csv] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/opt/app.jar!/BOOT-INF/classes!/readings.csv
halp pls
laranotreallycroft
Erpeg nez, moje izgleda ovak i radilo mi je iz prve
Resource resource = resourceLoader.getResource("classpath:readings.csv");
File file = resource.getFile();
Erpeg
laranotreallycroft
meni identicno izgleda
i readings.csv ti je u src/main/resources folderu ?
laranotreallycroft
Erpeg da
Gussy
Erpeg meni ti je bio isti problem, morao sam umjesto File file = resource.getFile() koristiti inputstream. msm da ti nakon ovog getresource(..) mozes pozvat metodu getinputstream()
nakon toga u konstruktoru od onog csvtobeanbuilder moras staviti new InputStreamReader umjesto FileReader
Cvija
huba buba Jesi to ovako napravio? S tim da je readings.csv u resources mapi
I kako vam docker compose datoteke izgledaju, što tu krivo radim?
docker-compose-services.yml
version: "3.9"
services:
temperature-microservice:
image: temperature_1.0
ports:
- "8090:8090"
humidity-microservice:
image: humidity_1.0
ports:
- "8091:8091"
aggregate-microservice:
image: aggregate_1.0
ports:
- "8080:8080"
depends_on:
- temperature-microservice
- humidity-microservice
networks:
default:
external:
name: "microservices"
docker-compose-infrastructure.yml
version: "3.9"
services:
config-server-microservice:
image: config_1.0
ports:
- "8888:8888"
eureka-server:
image: eureka_1.0
ports:
- "8761:8761"
networks:
default:
external:
name: "microservices"
s tim da je mreža microservies stvorena s docker network create microservices
Erpeg
uspio sam to rjesit sa inputstream
napomena - sve funkcionalnosti rade bez dockera
sad imam problem da se niti jedan servis ne zeli registrirat sa eurekom - error
equest for "http://localhost:8761/eureka/apps/CONFIG-SERVER-MICROSERVICE/f7120f88df17:config-server-microservice:8084": Connect to localhost:8761 [localhost/127.0.0.1] failed: Connection refused; nested exception is org.apache.http.
conn.HttpHostConnectException: Connect to localhost:8761 [localhost/127.0.0.1] failed: Connection refused stacktrace=org.springframework.web.client.ResourceAccessException: I/O error on PUT request for "http://localhost:8761/eureka/
apps/CONFIG-SERVER-MICROSERVICE/f7120f88df17:config-server-microservice:8084": Connect to localhost:8761 [localhost/127.0.0.1] failed: Connection refused; nested exception is org.apache.http.conn.HttpHostConnectException: Connect to
localhost:8761 [localhost/127.0.0.1] failed: Connection refused
i aggregator baca ovaj error
gController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'readingService': Injection of autowire
d dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'unit' in value "${unit}"
jel moguce da je ovo povezano sa git repo ?
ak da, di da njega stavim haha
itko imao slicnih problema ?
Erpeg
Erpeg
ok, naci niti jedan servis unutar dockera ne moze vidjet drugi microservis, a tako se onda nemoze niti povezat na njega
jel netko imao ovaj problem ?
WP_Deva
Savjeti za nekoga tko kreće sutra i treba sjajno odradit ovaj labos u 2 dana? 🙂
PepGuardiola
Pokušavam spremati “očitanja” u bazu nakon što dođe zahtjev na aggregator-microservice. Na postman dođe odgovor kakav očekujem, taj rezultat se spremi u bazu, ali u bazi uvijek imam samo to zadnje očitanje.
Ima netko ideju u čemu je problem?
vidraKida
PepGuardiola trebao bi prilikom pokretanja servisa sve procitat i onda sve spremit u bazu odmah?
PepGuardiola
Na teamsu su rekli da nije bitno hoćemo li odmah sve spremat ili pojedino očitanje nakon što dođe zahtjev. Ja sam odlučio radit na ovaj drugi način, ali mi uvijek ostane u bazi samo to zadnje spremleno makar ne restartam microservise.