Such quality content, that too for free? Unimaginable. I can't thank you enough. Not just techinal part, you cared enough to give us the context - unfathomable. God bless you
I am at 4:55:04 of the video and I learned so many things. Circuit Breaker Pattern, Flyway, OpenFeign, Swagger, Kafka and what not !! Lot of love, my friend 💕
Thank you so much for this tutorial! It’s easy to understand, simple to follow, and covers all the essential topics for free. I have a huge respect for your hard work.
Hi Sai, excellent content , you have covered everything which is actually according to industry standard and production grade (logging, containerizing, kubernetes deployment, centralized logging and so on..) Just wanted to understand , why do we even need api gateway, we can infact define an ingress and define routing to different services via ingress instead of using api gateway (offcourse we have also implemented circuit breaker within api gateway which is required for production grade application, but api-gateway also increases the complexity from my point of view, this can also be implemented at ingress level by using advanced ingress contrller: NGNIX or Traefic etc...). By the way excellent content, :)....
Thank for the course, it is really helpul. I noticed the code could be improved with these suggestions: 1) Make quantity non static: When placing the Order there is a check to Inventory how many items are available. But the quantity is not updated after placing that order so the Order could be placed indefinitely. Solution: Update that Inventory.Quantity using already existing kafka event "order-event" in Inventory Service listening for that event. 2) Make Quantity visible to user in Products UI: User does not know if the Product is available or not in the UI and can purchase not available product. Sulution: Duplicating the quantity to Product directly in the beginning using migration DB scripts (same quentity as in Inventory) and then updating that value by listening for the order-event also. What do you think? Thanks again for this course!
Thanks for the valid suggestions, I wanted to only develop the application functionality that's bare minimum to explore the topics related to the tutorial. Of course there are lots of improvements we can do regarding the functionality.
Really great course which covers a lot of technologies and how they fit into the big picture! Of couse if it included more complex business logic it would be just too long, so this is for the best. Do you have any plans for the future? Dont want to sound rude/ungrateful but here are some ideas: -Something leveraging GraphQL or WebSockets would be great for APIs -Redis and ElasticSearch regarding data -AWS + cloud agnostic tools like Github Actions and Terraform.
Yes these are great topics. This would be helpful for us individuals who are starting their careers. Please, waiting for another great project like this.
I have followed several courses on microservices and I have seen that they define a microservice with the name config-server to centralize the configuration of the other microservices and also define another microservice for eureka server. Could you explain me why you didn't make use of them? or in which cases they should be used and when not ? Thank you so much, I have learned a lot with this tutorial. Great work! 🥳
Eureka Server and Config Server can be used when you are not using Kubernetes. But when you are using Kubernetes both those features are not useful anymore because Kubernetes provides us service discovery out if the box and also it supports centralized configuration through Config Maps. So there is no need to do that for our project.
2 questions: 1 - API gateway is the entry point for all microservices, so it's dealing with authentication. Should the other microservices also be secured and validate the token against the auth server? 2 - How to deal with userId's? Should we use keycloaks userId we get from the token and use like a foreign key in other service databases, like usually (eg: user courses/books/whatever)?
I have a question about the error you encountered at 28:18. I changed the MongoDB URI in application.properties, but I'm still getting 'Authentication failed'
hi. I faced the same issue. 'docker logs mongodb' command shows access control is not enabled. So, it should work without the authorization credentials.
@@nuranranawaka1451 hii, try this 1. docker compose down -v 2. delete the data folder from product-service 3. run docker compose up -d , it worked for me
If you have MongoDB installed locally, change the following in your docker-compose.yml:ports:- "27018:27017" And update the property in your configuration: spring.data.mongodb.uri=mongodb://root:password@localhost:27018/product-service?authSource=admin
This video is very helpful. I am a 2023 graduate and I am depressed because I can't find a job. This video has given me hope that I can learn Spring and Spring Boot and get my first job.
if anyone had "No migrations found. Are your locations set up correctly? " issue, make sure to uncheck IDEA Tree Appearance -> Compact Middle Packages to differentiate db.migration and db/migration folder, db/migration is the correct folder structure we want
thanks for your responses. I cloned the angular project you implemented for front-end but in the header-component.html the @if and @else seem to be not recognised as the isAuthenticated method can not be called. The error is : Unterminated expansion form. If you have unescaped '{', use '{{ "{" }}' to escape it. which I think might be related to angular 17. if you know the issue, please let us know
Great video, Can you explain the same example with jeager instead of zipkin. Also I am facing an error with security config with spring parent version 3.3.4
Hello, because the deployment is on kubernetes now, and kubernetes provides a service discovery feature out of the box, and so it will be redundant to have also Eureka. I suggest to read some articles on client side discovery and server side discovery. Eureka is an client side discovery while kubernetes provides server side discovery with Service Object
Hi, Thanks for the making the video. Can we run manually all service on the dedicated port before we can start the testing on the frontend and what is the main use-case of the kind folder configurations?
Hey, I was trying to use modelmapper, but came to know that it requires a no args constructor and record does not provide that, what is the best alternative for this scenario or we have to map them manually all the time? Btw great content, loving it. THANK YOU ❤
Great course, but I have a question, is it possible to implement the gateway with the discovery server from the previous course ? Thank you very much !
Where is the code related to authentication and authorization ? where is the service and controller for the user ? I need to understand how this works in microservices when each user has access only to their products, orders, etc.
could you please explain why in this video you defined route class for implementing API Gateway, but another video implement it via application properties? for which purpose each one is used?
I am using Spring Cloud Gateway MVC in this video, there are some configurations missing in the MVC variant that's why I had to use the Java Config in this video. The previous tutorial I was using Spring Cloud Gateway that is based on Spring We flux, this project is more mature and provides all configuration through properties config.
I love your tutorial, however for simplicity I suppose Product Service and Order Service are sharing same mysql databse which should be separated by microservices principles. Am I right? Thank you for our hard work!
Thank you so much for this tutorial! It was really helpful. I need assistance with my Angular project. I'm encountering a CORS error and a 401 status when calling the add product API within Angular, even though the same request works perfectly in Postman. Could anyone help me resolve this? I’m not very familiar with Angular.js. Thanks again for this wonderful tutorial !!
why do we add docker-compose file, then add docker file with same info to build docker image, and repeat the info for k8s on manifest folder? It seems repeat of information, any option to avoid it or am I missing something?
You are confusing the responsibilities of docker file, docker compose and kubernetes, docker file contains set of instructions on how to build the image. Docker compose and kubernetes are used to run/orchestrate multiple docker containers
Hi, thank you so much for the course-it's been really helpful! 😊 However, I noticed that user details are being sent from the frontend instead of fetching the current user details at the service level. Is there a way to achieve that on the backend?
You can use Id token instead of access tokens and then the user information will be available in the backend. You will have to forward the id token to order service and read the token details to accomplish this, that means you have to enable security in the services.
Hello just a quick question. Do i need to make Interface for every class like service,dto.etc and then make an implementation. I am going to use this project in my resume so kindly reply.
hello, thank you for the content. any idea why I keep getting this error: [ERROR] Resolving expression: '${dockerPassword}': Detected the following recursive expression cycle in 'dockerPassword': [dockerPassword] @
Hi. What are the prerequisites for this course? I just finished core java, do i need to know the basics of spring boot or would core java suffice? Thank you!
You need to have good understanding of Spring Boot. Learn Spring Boot get some experience working with spring Boot, do some projects and start with the tutorial. The prerequisites are mentioned in the 1st 10 seconds of the video.
i am getting this error when i try to start docker mysql --> Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. PS C:\Users\codec\Documents\microservices-app\order-service>
can anybody pls clear one thing for me,i dont understand why we are not using autowire to inject dependencies and just using constructors?sorry i am a little new to spring boot and on other tutorials i have seen them using autowire.
Constructor injection is a preferred way to inject the dependencies. It's hard to explain it in the comments now, I would suggest to Google this topic there are many great resources explaining this concept.
please help i dont understand how the services are protected with such security as shown in the video as only the gateway will be protected but if we use services port directly then there are not protected
The services inside Kubernetes cannot be accessed from outside as they are using ClusterIP, so it's fine if we just secure the API gateway which is the entry point of the system. Securing each and every service can also be done but that will complicate the project without any additional learnings, that's why I chose to go with this approach
Someone please tell me am getting error while using @Builder and for that builder in service createProduct method Product product = Product.builder() error here it is not reconigsing am using Intelliji 2024 version
Amazing project sir , have not seen such content on youtube with up to end explaination.. and thank you too for dockerize it and deploy it on k8s. Biggggg Salute to you 🙏🙏🙏🙏
Such quality content, that too for free? Unimaginable. I can't thank you enough. Not just techinal part, you cared enough to give us the context - unfathomable. God bless you
just finished the 1 year old version of this project, with some research that one still works, thanks for the update
Hey, can you please recommend one over the other? I'm confused about which one to start.
Why there is a confusion ? Start with the updated tutorial, I already mentioned in the comments that the old one is not update anymore.
@@ProgrammingTechie Thank you, I'll reply back when done :)
@@thatcoderguy3159 are you done with the project ?
I am at 4:55:04 of the video and I learned so many things. Circuit Breaker Pattern, Flyway, OpenFeign, Swagger, Kafka and what not !! Lot of love, my friend 💕
Are you coding along with the video? I am stuck at 4:47:00 kafka consumer giving error for some reason.
There is nothing like this under the sun. great work.
Thank you so much for this tutorial! It’s easy to understand, simple to follow, and covers all the essential topics for free. I have a huge respect for your hard work.
Hi Sai,
excellent content , you have covered everything which is actually according to industry standard and production grade (logging, containerizing, kubernetes deployment, centralized logging and so on..)
Just wanted to understand , why do we even need api gateway, we can infact define an ingress and define routing to different services via ingress instead of using api gateway (offcourse we have also implemented circuit breaker within api gateway which is required for production grade application, but api-gateway also increases the complexity from my point of view, this can also be implemented at ingress level by using advanced ingress contrller: NGNIX or Traefic etc...).
By the way excellent content, :)....
Thank you so much. You covered everything I expected regarding the use of microservice architecture with different kinds of databases. Thanks a lot.
A Gem of tutorial. Really appreciate you for your good work
wow. u r such a great teacher sir. keep it up. May God bless u
Fantastic course! The part where you explained microservice communication and API gateways was incredibly insightful.
Thank you so much for this course.
Thank for the course, it is really helpul. I noticed the code could be improved with these suggestions:
1) Make quantity non static:
When placing the Order there is a check to Inventory how many items are available. But the quantity is not updated after placing that order so the Order could be placed indefinitely.
Solution:
Update that Inventory.Quantity using already existing kafka event "order-event" in Inventory Service listening for that event.
2) Make Quantity visible to user in Products UI:
User does not know if the Product is available or not in the UI and can purchase not available product.
Sulution:
Duplicating the quantity to Product directly in the beginning using migration DB scripts (same quentity as in Inventory) and then updating that value by listening for the order-event also.
What do you think?
Thanks again for this course!
Thanks for the valid suggestions, I wanted to only develop the application functionality that's bare minimum to explore the topics related to the tutorial.
Of course there are lots of improvements we can do regarding the functionality.
What a lesson ! , Thanks for everything 🙏
Incredible ❤🎉
Merci pour ce chef d'oeuvre
Really great course which covers a lot of technologies and how they fit into the big picture!
Of couse if it included more complex business logic it would be just too long, so this is for the best.
Do you have any plans for the future?
Dont want to sound rude/ungrateful but here are some ideas:
-Something leveraging GraphQL or WebSockets would be great for APIs
-Redis and ElasticSearch regarding data
-AWS + cloud agnostic tools like Github Actions and Terraform.
Yes these are great topics. This would be helpful for us individuals who are starting their careers. Please, waiting for another great project like this.
The course is great
Will this Project is enough for to mention in my resume for 2years of experience in IT industry ? all session are great !!!!!!
I have followed several courses on microservices and I have seen that they define a microservice with the name config-server to centralize the configuration of the other microservices and also define another microservice for eureka server.
Could you explain me why you didn't make use of them? or in which cases they should be used and when not ?
Thank you so much, I have learned a lot with this tutorial. Great work! 🥳
Eureka Server and Config Server can be used when you are not using Kubernetes.
But when you are using Kubernetes both those features are not useful anymore because Kubernetes provides us service discovery out if the box and also it supports centralized configuration through Config Maps.
So there is no need to do that for our project.
excellent tutorial thank you very much
Awesome Project !!!
2 questions:
1 - API gateway is the entry point for all microservices, so it's dealing with authentication. Should the other microservices also be secured and validate the token against the auth server?
2 - How to deal with userId's? Should we use keycloaks userId we get from the token and use like a foreign key in other service databases, like usually (eg: user courses/books/whatever)?
1. Ideally yes, but in this setup I choose to not go with that option that would complicate the project a lot.
2. Yes that's right.
@@ProgrammingTechie What if we use a service mesh?
I have a question about the error you encountered at 28:18. I changed the MongoDB URI in application.properties, but I'm still getting 'Authentication failed'
hi. I faced the same issue. 'docker logs mongodb' command shows access control is not enabled. So, it should work without the authorization credentials.
@@nuranranawaka1451 hii, try this 1. docker compose down -v 2. delete the data folder from product-service 3. run docker compose up -d , it worked for me
I'm facing the same issue. How did u fix the issue?
If you have MongoDB installed locally, change the following in your docker-compose.yml:ports:- "27018:27017" And update the property in your configuration: spring.data.mongodb.uri=mongodb://root:password@localhost:27018/product-service?authSource=admin
This video is very helpful. I am a 2023 graduate and I am depressed because I can't find a job. This video has given me hope that I can learn Spring and Spring Boot and get my first job.
Great course. Can you provide a roadmap for a java developer?😅😛
if anyone had "No migrations found. Are your locations set up correctly? " issue, make sure to uncheck IDEA Tree Appearance -> Compact Middle Packages to differentiate db.migration and db/migration folder, db/migration is the correct folder structure we want
Sir Please make video for Kafka Separately - you lectures are awesome
Hi, can you do one more thing? Can you create a lecture on database replication in a master-slave architecture?
Excellent
you have skipped lots of time, 5:23:06 how did you get the folder 'prometheus' inside docker folder?
Jabar thanks
can u create one video for database replication like in mysql we have master slave architecture
thanks for your responses. I cloned the angular project you implemented for front-end but in the header-component.html the @if and @else seem to be not recognised as the isAuthenticated method can not be called. The error is : Unterminated expansion form. If you have unescaped '{', use '{{ "{" }}' to escape it. which I think might be related to angular 17. if you know the issue, please let us know
thank you sir
In the previous tutorial you used eureka discovery server, is it a good practice to use it in this project?
i don't see any link to spring data mongodb course link, can someone please share the video link?
Great video, Can you explain the same example with jeager instead of zipkin. Also I am facing an error with security config with spring parent version 3.3.4
You had used Eureka for service-discovery in older version of this project. Why it is not used in newer one. Please Explain?
Hello, because the deployment is on kubernetes now, and kubernetes provides a service discovery feature out of the box, and so it will be redundant to have also Eureka. I suggest to read some articles on client side discovery and server side discovery. Eureka is an client side discovery while kubernetes provides server side discovery with Service Object
In the future, can you do projects with reactjs frontend technology?
Hi, Thanks for the making the video. Can we run manually all service on the dedicated port before we can start the testing on the frontend and what is the main use-case of the kind folder configurations?
Hey, I was trying to use modelmapper, but came to know that it requires a no args constructor and record does not provide that, what is the best alternative for this scenario or we have to map them manually all the time? Btw great content, loving it. THANK YOU ❤
Getting this eoor in order service in postman
500 Internal Server Error
tables are created in MySQL.
Wow...All this for free🏆🥇💙Thank you
Great course, but I have a question, is it possible to implement the gateway with the discovery server from the previous course ? Thank you very much !
Yes, but it's not needed, service discovery is handled by Kubernetes
Where is the code related to authentication and authorization ? where is the service and controller for the user ? I need to understand how this works in microservices when each user has access only to their products, orders, etc.
could you please explain why in this video you defined route class for implementing API Gateway, but another video implement it via application properties? for which
purpose each one is used?
I am using Spring Cloud Gateway MVC in this video, there are some configurations missing in the MVC variant that's why I had to use the Java Config in this video.
The previous tutorial I was using Spring Cloud Gateway that is based on Spring We flux, this project is more mature and provides all configuration through properties config.
can you please increase your ide font little bit
i have a problem with the swagger ui, i get a whitelabel after adding springdoc and path to the app properties
I love your tutorial, however for simplicity I suppose Product Service and Order Service are sharing same mysql databse which should be separated by microservices principles. Am I right? Thank you for our hard work!
Hello,
They are not sharing the same database, but the same cluster, so this is still fine for our sample application.
@@ProgrammingTechie Thank you! I figured you can have the same instance of a database but have different database names, which is perfectly fine!
Thank you so much for this tutorial! It was really helpful.
I need assistance with my Angular project. I'm encountering a CORS error and a 401 status when calling the add product API within Angular, even though the same request works perfectly in Postman.
Could anyone help me resolve this? I’m not very familiar with Angular.js.
Thanks again for this wonderful tutorial !!
Great course however, next time could you please zoom in more and have the code more magnified. Squinting to see the code is quite hard.
Next time please zoom the ide, because it is less visible
why do we add docker-compose file, then add docker file with same info to build docker image, and repeat the info for k8s on manifest folder? It seems repeat of information, any option to avoid it or am I missing something?
You are confusing the responsibilities of docker file, docker compose and kubernetes, docker file contains set of instructions on how to build the image.
Docker compose and kubernetes are used to run/orchestrate multiple docker containers
Wrong info.
In openfeign when you are creating interface You have to match the signature of the controller where you are going to do the request
Hi, thank you so much for the course-it's been really helpful! 😊 However, I noticed that user details are being sent from the frontend instead of fetching the current user details at the service level. Is there a way to achieve that on the backend?
You can use Id token instead of access tokens and then the user information will be available in the backend.
You will have to forward the id token to order service and read the token details to accomplish this, that means you have to enable security in the services.
Would you mind adding card payment on the project
nice
Hello just a quick question.
Do i need to make Interface for every class like service,dto.etc and then make an implementation. I am going to use this project in my resume so kindly reply.
hello, thank you for the content. any idea why I keep getting this error:
[ERROR] Resolving expression: '${dockerPassword}': Detected the following recursive expression cycle in 'dockerPassword': [dockerPassword] @
what changes i need to make if i want to use React Js for front end , can you please suggest
?
Thanks for the amazing course :)
No Changes needed on the backend side, you need to port all the functionality of angular to Reactjs
Hello I am here to learn to dockerize and use kubernates for my microservice project is this course updated?
This course was really helpful
Hi. What are the prerequisites for this course? I just finished core java, do i need to know the basics of spring boot or would core java suffice? Thank you!
You need to have good understanding of Spring Boot.
Learn Spring Boot get some experience working with spring Boot, do some projects and start with the tutorial.
The prerequisites are mentioned in the 1st 10 seconds of the video.
🎉🎉🎉🎉🎉🎉🎉🎉
Please
Stripe payment gateway integration in spring boot
Can we have a video where this is deployed somewhere ?
I am deploying it on Azure VM, close to finishing it. Please check back in 1-2 days, I should be able to provide the guidance.
how does Angular get the token without specifying the client secret from keycloak, where is the secret mentioned in angular app?
It uses Authorization code PKCE to get the token, you can check my Spring Boot Keycloak video to learn more about it
Can we have all 3 services in single repo?
Can someone tell me how and where dbs are created while using this docker, idk much about docker things
i am getting this error when i try to start docker mysql --> Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
PS C:\Users\codec\Documents\microservices-app\order-service>
i can't connect to mongodb database with root, passwod credantials
hello, is distributed tracing implemented here
Chaos, chaos, chaos...
Alright :)
Is this one the paid one that was about to be released ?
No, the paid course will be a completely different course and has more topics covered
@@ProgrammingTechie when its coming out, its been 3 months no update
@@ProgrammingTechie
I hope you will do the frontend technology which is reactjs, thank you very much for the course
can anybody pls clear one thing for me,i dont understand why we are not using autowire to inject dependencies and just using constructors?sorry i am a little new to spring boot and on other tutorials i have seen them using autowire.
Constructor injection is a preferred way to inject the dependencies.
It's hard to explain it in the comments now, I would suggest to Google this topic there are many great resources explaining this concept.
can a person with no or little knowledge on the tech stack see this video and still learn all the process in detail??
This is not a beginner level tutorial
First Comment 😊
Hi,
i tried creating this project with spring latest version 3.3.3 as of now. and my build failed. any idea?
PS: it worked with 3.2.9
please help i dont understand how the services are protected with such security as shown in the video as only the gateway will be protected but if we use services port directly then there are not protected
The services inside Kubernetes cannot be accessed from outside as they are using ClusterIP, so it's fine if we just secure the API gateway which is the entry point of the system.
Securing each and every service can also be done but that will complicate the project without any additional learnings, that's why I chose to go with this approach
@@ProgrammingTechie How to implement RBAC(Role based access control) if we delegate authentication and authorization to gateway?
@ProgrammingTechie please tell why am i getting error for Product.builder()
use @Builder annotation in Product model class
Is this a reupload??
Someone please tell me am getting error while using @Builder and for that builder in service createProduct method
Product product = Product.builder() error here it is not reconigsing am using Intelliji 2024 version
pls go to the settings -> build -> compiler -> annotation processors -> select obtain processors from project classpath || this fixes the issue
am getting CORS issues for some reason. any help good people?
Same here after clicked Add Product in the Add Product Page
Same here after registering with a new user? did you find the solution?
Same issue. Have you solved?
@@kishorekumarmenda7199, @dses6611 i've solved btw. still need a help?
Completed total 13 video s???
Yes
bro teluga nuvvu
avunu :)
: )
Amazing project sir , have not seen such content on youtube with up to end explaination..
and thank you too for dockerize it and deploy it on k8s.
Biggggg Salute to you 🙏🙏🙏🙏
Thank you sir
Hi, can you do one more thing? Can you create a lecture on database replication in a master-slave architecture?
he is not your secretary. You don't even say thanks but you ask for more? You sound ungrateful and unprofessional.