Microservices using SpringBoot 3.0 | Full Example [NEW]

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey what's up everyone and welcome to daily code buffer in this video we are going to build an entire microservices architecture using springboard 3 which is latest and greatest and we are also going to use the spring Cloud functions as well and all the nitty-gritty details about it so without any further Ado let's get started now I had created a similar kind of video couple of years back where we had created micro services with spring boot with all the other features and all the other nitty-gritty details right all the other components and everything and I have got so much love from that video and you guys have received it really well and this is the updated version of it as a lot of things have changed in the technology technology constantly evolves right so this is the new version where we will go through all the latest versions of springboard 3 spring Cloud Zipkin and everything so this is going to be the updated version and we are going to go through each and everything and we are going to build entire microservices architecture so you're going to learn all the things about how to create a microservice architecture and how everything works together and all the components related to it this is going to be the stepping stone for you to work on the micro Services architecture so this is the entire architecture that we are going to build today let me walk you through what we are going to build today and all the different component related to it so yeah you can see that the microservices word suggests itself that we are going to create different different small services that will have its own purpose and services all the services will have its own purpose like suppose here you can see that there is a department service there is employee service so Department service will work solely for the Department if I want to create some departments I want to get the details of the department update and all the related stuffs for the Department I am going to do with the Department service and if I want to work with the employee like adding the employee getting the employee updating the employee for which department who all employees are there all those details I can get using the employee services and you can see that these two services will also interact with each other suppose I want to get all the employees for a particular Department okay how I will get because all the Departments will be getting from the Department service and all the employees are stored in the employee service so if I want to get all the employees for a particular Department I have to call the employee service so that also we are going to see here today that how we can call the inter services and how we can get the data in the entire microservices architecture so you can see these are the two services that we are going to create here and you can create multiple Services the concept will remain the same okay so these are the two Services we are going to create and this is you can see that this is our business service layer right so all the business services will be in this particular block that we have created here and there are other services that will help all the business service to work together that also we are going to see now for both of the services there will be a different database attached to it because in the microservice world everything should be separated out okay so Department service will have its own database employee service will have its own database and if you want to get data we will get the data with the API calls only we won't be directly connecting to the other database the other thing that we are going to create here today is the services tree so service registry is the server itself which will have the details about all the other services connected to it okay so it will be like the Hub which will know that how many services are attached to it and how many instance of that particular services are also attached to it the main point of creating the micro Services is that we can scale up and scale Down The Individual Services that we have created suppose I want to only scale up Employee Services I can do that for only employee services so if there are five instances of Employee Service then service registry will know that there are five instance of Employee Services attached to it if there are couple of instances for Department service service registry will know that as well so all those instances and all those services will be connected to service registry so service registry will know each and everything now the other advantages of the service registry we will get is suppose I want to call the employee services from the Department service now Employee Service have five instances and Department service have couple of instances so how I will get to know that for which instances I have to call from which instances I will get the data that I will not know right so what I will do is I will call the service registry that hey service registry I want the data from the employee service and from this API so I will point to that instance of the service registry and service registry will handle the load balancing between all the five instances and it will get me the data okay so that load balancing will be also done by Services history so we will get the benefit out of multiple instances available in our architecture so that is the another part service registry and it is provided by the Netflix OSS so we are going to use that libraries to create our service registry and for this service registry all the dependent services will be the client for that service registry okay don't worry about anything if you are not able to understand we are going to create each and everything in the proper demo itself so when we are creating those Services you will get a complete understanding how we are going to build everything the other thing is API Gateway now this API Gateway is a gateway for each and every public request coming to your architecture so rather than calling directly Department service and directly calling Employee Service all the public apis will be exposed via API Gateway itself so all the requests coming via API Gateway only will be traversed through the different services in the architecture so no request can directly come to the department service or the employee service every request have to come to the API Gateway API Gateway will decide okay this is the request for employee service so let's send that request to the employee service this request is for the Department service so let's send to the department service and within the API Gateway we can add the Securities as well that all the request has to be secured then only it should go towards the different services so API Gateway will play that role as a Gateway for all the requests coming to our architecture to our infrastructures okay then you can see there is a config server as well now what config server will do is config server will serve all the default configurations or all the configurations related to the different services to our entire architecture suppose we have five services available here right so all the five services will have some common configurations and all the services will have its own configuration as well own different configuration like suppose employee service will have its own configuration and it will also have some common configurations right so having all those configuration only towards the employee service it's not feasible so what we will do is we will keep all those configurations separate out from the service and will host those configuration and all the services will get the configuration from that particular service and it will be using those configuration so suppose config server when you create the config server it gives us different options like where we can store those configuration the default will be in the Git You can store all the configurations in the git and from that git configurations will be served to all the different services available you can store all the configurations in the SVA and we can store all the configurations within that native server itself and from there all the configurations will be solved so this way config server will help us to serve all the common configurations and specific configurations for a particular services and all the services can connect to that config server and get all the configurations related to particular service okay so that config server will help us to store the common configurations and specific configurations now the next important thing in the micro Services is we have to take care about the distributed log tracing which is how we will be able to trace our request how we will be able to debug our application like what happened where so suppose a request comes to the API Gateway and from that API Gateway request travel to the department service and from that department service request went to the employee service and suppose if there are more couple of services the request went there as well to get all the data collected and send it back now at any given point of time something breaks and we need to identify where it happened where the request failed and what is the entire trace of that particular log okay so suppose request came here now that particular request came here to the department service now from that department service this does that request went to amular service or not all that entire tracing of the log can be done using the Zipkin so Zipkin is a distributed log tracing tool which will allow us to trace the entire log for all the different services that we have so it will have this pan ID and a trace ID with those two things will be able to trash the entire log and it also provides the dashboard where we can see what happened for a particular request as well it will use the micrometer observability to do all those stuff so we are going to configure that as well within the springboard 3. so all these different things have changed from the previous spring Boot 2 so we are going to update each and everything here so here you can see that employee service department service API Gateway all will have the Zipkin libraries to it and all that particular data all that observability matrices for the logs will be published to the Zipkin server and we will be able to see each and every data in the Zipkin server itself okay so you can see that this is the entire architecture that we are going to build today with where we are going to build the business services where uh we will be able to create and get all the data related to departments and employees and we are also going to create a non-functional Services which will help us to have our entire microservice architecture we are going to create the service registry API Gateway config servers and Zipkin as well so this will all create the entire microservice architecture there are more components also involved to it but this is the basic block that you need to know about creating the microservice architecture and based on the requirements and needs you can add the different components to it okay if you want to know more about teaching everything in detail from creating your microservice architecture to deploying each and everything I have dedicated course on that and I will link that in the description below so you can check that out and if you are interested you can enroll in that as well where we will go from creating the basic microservice application to deploying that application using Docker kubernetes to Google Cloud platform so now with all the basic details covered all the architecture details covered let's start building our application so what we will do is the plan would be to create the department service and then to create the employee service connecting each and everything to the service registry then adding the API Gateway which will allow all the traffic all the requests from only API Gateway to the department service in the employee service and will create the config server which will serve all the configuration for all the services and all the logs will be traced by the Zipkin okay so that's the block that we are going to create here so let's jump to the spring initializer and create the springboots three projects so what I'll do is I will go to start.spring.io and here you can see this is the spring initializer from where we can create our springboot 3 projects so here you can see what we will do is we are going to select the languages Java and the project is Maven project and three spring boot version that we are going to use is spring 3.0.5 okay and then we are going to give the group name as com Dot daily code buffer and the artifact name that I'm going to give is service registry okay first we are going to create the service registry and for that service registry once that service registry is up we will create the different department service and employee service those will connect to that service registry so once this is done the packaging we are going to select as jar and Java version we are going to select as 17 so you can see that we are using all the latest and greatest available here okay we can use Java 20 as well but we'll stick to long term support version okay and then the dependencies so for creating the service registry we are going to use the service Eureka server okay so this is the dependency where it says it's a spring Cloud Discovery and spring Cloud Netflix Eureka server okay so this is from the Netflix so this is what we are going to add here and we are going to add as a web spring web dependency okay so these two dependencies that we are going to add and for this we are going to generate the project and open in your favorite ID I'm going to use the IntelliJ IDEA but you can use your favorite ID okay you can use Eclipse you can use netbeans vs code or I IntelliJ IDEA okay so let's generate the project on open an intelligent idea so let's generate it okay so this is a service registry project let me open the IntelliJ IDEA here okay and what I'll do I'll open the project here and service registry so let me open this project here it will take a couple of minutes to load all the dependencies so we'll wait for until it's completed so here you can see that the project is loaded here and what we will do is we will go to the SRC main resources and we will convert this property files into a yaml file because we are going to use the yaml configuration rather than the properties so we'll just rename it and we're just going to change to yaml configuration okay and we'll go to the service registry application here and what we will do is we will enable Eureka server so we will just annotate with enable Eureka server okay so now this application will work as a service registry okay now one more configuration that we need to add is on which Port this application should run and we also need to add the configuration where this application is a server it should not act as a client and it should try to connect to itself okay so that configuration we are going to add that you are a server don't try to connect with yourself so we'll go to the application.tml file and we will add the configuration here server.port as 8761 okay this is the default Port where uh the service registry will run on and we are going to give the name of the application that is the service registry Source paying application name as service registry and we are going to add the Eureka dot instance Dot hostname okay as localhost what is the host that you are going to use and then client dot register with Eureka as false okay don't register with Eureka fetch registry as false and we are going to add the service URL okay so here you can see that we added the basic detail that is the Eureka instance host name as localhost and Eureka client register with Eureka as false don't register with Eureka and fetch registry is also false and service URL we have given as HTTP eureka.instance dot hostname which is localhost and server.port that is the 8761 and slash Eureka okay so these are the details that we have given here now what I'll do is I will start the application here okay so here you can see that application started okay and what I will do is I will go to the browser and I will do localhost colon 8761 that is the code right and you can see that it is up and running this is my spring Eureka and you can see that there is no instance available because there is no clients available okay and everything is up and running okay so you can see that now we just created the service discovery that is a service registry itself now what all the different services that we are going to create all those are going to connect to this Services history that we have created okay so now let's go and create the department service so what I'll do I'll go again to the spring initializer and what I'll do is I'll just change the artifact name as the Department service okay so this is a department service name of the artifact is Department service okay the packaging version is 17 spring boot version is 3.0.5 and I don't need the Eureka server here I need spring web because I'm going to create this spring web project but I need as a Eureka Discovery client okay this is going to be the client for this server that I have created also I'm going to add the springboard actual dependency because we are going to publish the matrices as well okay so that's why I'm going to add a springboard actuator now there are a couple of more dependencies that we are going to add but what I will do is I will create the project and I will show you later what is needed and how we will be able to add because ideally we are going to use the Zipkin so Zipkin dependencies we are going to add we are going to create the config server so config server dependencies also we need to add okay so those all dependencies we will use and we will add once we create those Services okay so for now this is more than enough so let's generate the project and open an IntelliJ IDEA so I'll generate the project I have added in the folder here so let me go back to the intelligent idea let me go to May 1 and the project so I'll go to this spring boot 3 and I'll add Department service here okay so I've added the project here so we'll wait for couple of minutes we'll enable the use Services here so we can directly use this Services tab to start all our services okay so now all the dependencies are sorted out so we will go to the department service and we will do the same thing over here what we'll do the first thing is we will change the employee application.properties to application.yaml okay so now this configuration is changed so now within this Department Services what we have to do first thing we have to do is this department service should run on some Port information okay so we'll give the port details it should have some name so we'll give the name and it should connect to the service registry that we have added okay these things are the first things okay so let's do that so we will go to the Java we'll go to the department service application main file and we will enable Discovery client okay so now this is the Discovery client for the service registry that I have created okay now all the configuration also I need to add like to which server you should go and connect right that also we need to add so I'll go to the application.tml file and here I'll add all the configurations okay so here I'm adding two configuration that is the server.port 8081 so this application should run on Port 8081 and it should go and connect to the service URL that is the localhost 8761 Eureka so I've added Eureka client service URL and default zone is this so this application should go and connect to the default Zone available here okay so if you are deploying to any other environment this URL needs to be changed current dates in localhost I have just defined localhost but if you are deploying via Docker or kubernetes this URL will change so this is the configuration now the name and the application name is spring application name as Department service okay so you can see that the name of my application is Department service it should run on Port 8081 and it should kind of go and connect to this URL okay so all these things are done so now let's go and and start the services okay we'll start this department service here so here you can see that service is started and if you go and check to the logs okay you can see that it started on 48081 and the discovery client name is Department service you can see that it has the name Department service and it went and connected to our service registry so if I go back to this Eureka server and if I refresh you can see that I have got the department service here and now it is connected and you can see that it has one uh availability zones and this is the URL for it and it is running on Port 8081 so you can see that now I was able to create one service and now that service is connected to my service history as well cool right so you can see that one step is done now let's do another thing let's create a config server and from that config server we will publish all our configurations right simple thing we'll wait until we actually create all our business logic but let's first do all those non-functional stuffs right because those are important things once those are set we are good to create all our applications all our business logic okay so now currently you can see that the configuration details we have added here right that it should go and connect to this Eureka what is the port information and all those stuffs okay but rather than that what we will do is we will export all this configuration to the config server and config server will allow our application to get all the details okay from those configurations so let's go and create the config server so what I'll do is I will go to the browser okay and what I'll do I will just come here and I will just change this to config server okay this is the config server that I'm going to create and all the packaging should be jar jar version is 17 and from here I'm just going to remove all these details here okay all these dependencies I don't need it and I just need as to be a server that is the config server okay that is spring Cloud config Central management for configurations via gate svnr have she got Vault okay so this has to be my config server okay so now as the dependency is added I have changed the name as well let me just generate this project and open an IntelliJ IDEA so let's enter the project okay I'll go to the IntelliJ IDEA I'll go to main one and add a project here and here I'm going to add the config server okay so here you can see that config server is added so let me go here to main application.yaml file and let me just change to yaml rather than properties okay so now this is my yaml file now this has to be the config server all the configuration should be rested here in this config server and all the other services like employee service department service should connect to this config server to get all the configurations cool right so let's do that so first thing is we need to go to the Java file that is the config server application and we need to enable as a config server okay so we have enabled with The annotation so all the auto configurations will be done by the spring boot itself we do not have to worry about each and everything now we have to go to the application.tml file and we have to do the configurations here so first thing that I'm going to do here is I'm going to add the port information that is server Port 8088 so my config server is running 1.8088 okay now another thing by default my entire configuration my entire configuration from config server by default is get so by default it will assume that I need to get the GitHub link or a git link where I can go and get the configurations okay that is the one step if you want to know more about that in my previous video I have done the same thing you can create a GitHub repository add all the configurations there and you can get from there as well but here I will show you another way where you can add all those configurations within this config server you can create different ml files and for this config server you can get all the details and obviously this config server also you're going to add in the GitHub or git repository so from there you do not have to create multiple repositories it will just get all the details from your native application itself so your native application means this is the mean our application so we need to enable the native profile within our application so that this will not go or it will not demand the GitHub URL or get URL but it will just look up within the application itself I hope I'm making any sense but once I will add the configuration you will understand more about it so what I'm doing is once the port information is set I am enabling the profile here as native so I'm just adding spring profiles active as native profile okay by default profile is get so I'm just changing to Native okay now it will search for all the configurations within this config server and from there only it will publish the configuration to the other service it won't go to git okay now within this resources I am creating another directory to store all my configurations okay so I'm just creating a directory and it and I'm just going to say it as a config now within this config directory I am going to store all the configurations okay now all these configurations I am going to store based on the service name that I'm going to create so I have a department hyphen service right so here I'm going to create file okay within this config I'm going to create a file and I'm going to need name as Department hyphen service dot yaml so you can see that the name of the service and the file name should be same so I'm going to create the department service yaml file cool right now what I will do is I will go to the department service I'll go to the application.tml file and I will get this configuration from here and I'll go to Department serviceml file and I will add here similarly I will get this configuration and I will add here so you can see that I just kept the name of the application within the application rest all the cancellation I have moved to the config server so that configuration I have done now now another thing that I have to do is what this application Department service right Department service should get the configuration from this config server okay that is something that we have to add because other than that if you don't add it it won't know that where to connect to right so that configuration let's add so what I'll do I will go to the department service I'll go to the application yaml and within this spring I'm going to add spring config spring config import import the configuration from where from the config server okay and what is the config server that is the URL HTTP localhost colon 8088 because my config server is going to run on Port 8088 okay and here I've added optional this option means that if the config server is not available then still the application will start okay it won't fail okay if I remove this then that is a mandatory configuration okay so this income config information I have added here so now you can see that all the configurations are available within the config server and it will export all the configuration to my department service okay so let me just start the config server here I'll go to the not started I'll go to the config server and I will start it okay so you can see that config server has started if I show you the logs okay so here you can see that the config server started it is running on port088 so now what I'll do is I will restart my department service so here I am getting the error that I'm not able to connect to this localhost 8088 right so let me just restart my config server let's restart the department Service as well so here you can see that you are not able to connect to the config server right why because we need to add the dependency as well that this is a config client right so what we will do is we have to add the dependencies so let me go to the browser I'll go to the initializer okay so we have config server right so there is a config client as well so config land okay client that connects to a spring Cloud config server to fetch the applications configuration okay so we need to add this configuration to the department service so it can connect to the config server so let me just add this dependency and if I click on explore here okay within this onboard XML file you can see that there is a dependency that is a spring Cloud starter config okay first one was a spring Cloud config server this is what we added in the config server now below one this is what we have to add in the department service so I'll go to the IntelliJ IDEA I'll go to Department service I'll go to pump.xml file and I'm going to add the dependency here okay once the dependency is added I refresh the muen project once that is done I will start my application and here you can see that the application is started and you can see that here within the config server we are able to see that one property was added for the Department service so now you can see that it is showing that it is serving the department service.aml file and Department service was able to connect that and get the details based on the name itself okay so now if I go here if I refresh my Eureka you can see that it is a built to connect now so all this configuration details was fetched from the config server cool right now what we'll do is one more point is remaining here right so if I go here you can see that we added the config server we added the services tree we created the department Service as well so now what we will do is we will add the Zipkin and we'll add the Zipkin dependency as well so all the loggers that we add all those traces can be passed to the ZIP code so this Zipkin is a Zipkin server so what we can do is we can have the libraries and we can start the Zipkin server and we can add the dependencies within the particular services to send all those observability matrices to the Zipkin okay so let me create a Zipkin server for you so what we will do is we can go here and we can say Zipkin server using Docker okay so this is the best thing we will use a Docker to get all the details okay so we'll go here okay this is the open Zipkin and if you scroll down here you will get a command what you can do is you can get the Zipkin jar file as well and you can start the jar file to start the server or what you can do is you can run the docker command as well to start the docker and this pin will run so you can see this is a Docker command if you do not have Docker installed within your machine that's all okay you can get this jar file from this command and you can start the Zipkin from here okay this also you can use if you have Docker install this is the easier way to install or start the Zipkin server I have Docker installed so let me just start the docker here okay the docker is starting it will wait for one minute to complete it once the docker is started we'll open the terminal okay and we will run this command Docker run hyphen D in the detached mode hyphen P that is a port information that is 941 call it 941 so nine four double one port of the container should be exposed to the host that is nine four double one and the image that we are going to use is open Zipkin Zipkin so once you run this you can see that I already had the image so it directly started but if you don't have the image it will check that image is not available and it will pull the image and it will start the container for you okay so now if I go to localhost colon 941 because that is the port that we have exposed right so here you can see that my Zipkin is up and running here you can search by Trace ID you can run the queries and all the details will be available here cool right so this is the Zipkin now we need to connect our application to this Zipkin server as well so what we will do is we'll go to the spring initializer okay and we will add the dependency that is a Zipkin you can see that this is a Zipkin observability enables an exposed span and Trace IDs to Zipkin because that's what we want so we'll add this alongside this we are also going to add the actuator okay two things will work together actuator will have the micrometer within it so zip pin is added we will go to explore to get a particular dependency okay what it actually is adding so if you go over here once you add the Zipkin it will add two dependencies here that is the micrometer tracing Bridge Brave and Zipkin reporter Brave now this Brave is particular version So based on the spring boot version this dependency can change okay so this dependency is particularly for spring 3.0.5 if this version is changing this make this version also can change okay so make sure that you double check this dependencies so I'm just going to copy this dependency and I'm going to go to the IntelliJ IDEA I am going to go to the department service within the department service I'm going to go to the pom.xml file and within the sperm.xml file I'm going to add these two dependencies once the dependencies is added I'll refresh them even project so the maven project is reloaded Now by default once you add this to dependencies it will have the auto configuration and by default all the logs will be published to localhost 9411 by default right so we do not have to change anything but one thing you need to change is that you need to make sure that you are publishing all the matrices to Zipkin by default it won't publish all the matrices it will have the different probabilities so we need to make sure that hundred percent matrices is published okay so for that the configuration is we will go to the config server and Department service okay because that's the common configuration we can add in the department service so here I am going to add management tracing sampling probability as 1.0 that is 100 okay so everything should be published okay so that's the default configuration that I am adding so now once all these configurations are done your application your department service will start publishing all the data to Zipkin okay so now what I'll do I will just stop all the services okay I will start my config server first that from this configuration we need to connect to each and everything then I'm going to start my service registry and then I'm going to start my department service so here you can see that everything is working completely fine okay so now if I go back here if you go to this image we created the config server we created the department service we created the Zipkin server and we connected our department service to Zipkin server as well we created service registry as well and service registry we connected Department service to it okay now two things remaining that is the employee service and the Epi Gateway first let's create the business Logic for our department Series where we will create the apis to add the department save the Departments and everything then you will create the employee service to save all the employees and everything and then we will connect to the API Gateway so everything will work together cool right so let's go to the IntelliJ IDEA and let's work with the Department service so I'll close all the files here okay and we have to work with the Department service so within this department service I'll go to the main Java and within this package what I need I need controller I need repository I need model okay so that is what I'm going to create I'm going to create a new package that is controller I am going to create Repository and I'm going to create a model okay within this model I'm going to create a class that says Department okay and within this department I'm going to add these three properties that is the department ID Department name and the list of employees within this department so I need to create the employee as well right so let me just create the employee model as well okay and I'm going to create the employee but here let me use the Java 17 feature that is the record okay so here I'm showing you both the things earlier as well in the previous videos we saw that how we can use the records within the spring boot 3 right so let me just create the record here So within this record within this employee record I am going to add few Fields so the few fields are ID that is the employee ID that is long then the department ID like this employee belongs to which department ID the name of the employee the age of the employee and the position of the employee okay by default this record this class will be final and all the properties will be created using the Constructor it won't have any status but it will have all the Getters to it okay that's the property of the record so the record is created if I go to Department I can import list here and the error list okay so now within this Department let me create all the data Setters and everything so what I'll do I'll create all the data Setters for each and everything I will create two string method okay and I will create Constructor but with only ID and name I'll create a default Constructor as well with no Fields okay so here you can see that I just created all the boilerplate code where I created the default Constructor Constructor with idn name and all the two string method and the data settings everything so everything is created okay now let me create a controller and the repository so here let me create a Java class that is a Department controller okay and I'm going to create a repository that is a Department Repository cool right two things done I annotate with address repository here and for the controller I'm going to annotate with at the rate rest controller okay and I'm also going to add as a request mapping as a Department okay now within this application what I'm going to do is I'm going to have a list of department and from there only I'm going to serve it if you want you can connect to Azure database and you can connect to mySQL database as well it is really easy I have created a bunch of videos to do the same thing you can follow that and you can add a database and you can do that way here to save some time to more focus on the micro Services I am just creating a list and I'm just getting data from the list okay so what I'll do I'll go to the repository and here I'm going to create a list so here I have created a list of department within the department repository here I've created the list of departments here and this list of departments will be stored here okay with all the different methods so let me create a different methods here okay so I'm going to create public add Department method which will take Department so here what I'll do I'll add departments dot add Department and return Department okay you can see that this is a simple add method okay I have not done anything special yet I'm taking the department here as input parameter and I'm adding that department to my list and I'm sending the department back okay this is my ad Department method we will call this method from our controller layer okay now let's create another method Public Department find by ID method okay we'll get the ID and we will find it based on the ID so we'll take the long ID year okay and we are going to return departments dot stream dot filter Department department DOT get ID dot equals ID okay dot find First dot or else okay so you can see that this is a simple thing okay here you can see that I am looping through the Departments here and I'm filtering the department ID based on the ID provided and if I find it let's send it otherwise through the exception okay this is the find by ID method let me create one more method that is the public list of department find all and I'm going to return departments okay simple this is going to written all the Departments that I have okay so this is my repository layer which will have the different methods to work with this list now I'll go to the department controller and here I will create the apis so that I can get the data so first thing I need to have the object of the department repository right so Department Repository and I'm going to Auto wire it okay so I have the object of the repository now as I'm going to publish the logs as well using the Zipkin I need to have the loggers as well in place right so let me just add the logger so I'm going to add private static final logger logger I'll use the sl4j logger equals to logger Factory Dot getlogger and the name of the class that is the departmentcontroller.class okay so your other object is created now we can log everything here so now let's create some of the methods that is the save method get method and get by ID method here okay so here I am going to add public Department add method here this is going to take Department object okay and this is going to return repository dot add department and it's going to take the department as the input your method is completed this entire department is going to be your request body so I'm going to annotate with request body here and this entire method is going to be post method so I'm going to add the post mapping here okay so here you can see that the method is created to save the data for the Department okay now let's create one more method to get the data so I'm going to add public list of department find all method and this is going to take all the Departments this is going to return repository dot find all okay this is going to send the list and this is going to have the get mapping okay so get all method is done now get by ID will do so we will do Public Department ID and I'm going to take this long idea and I'm going to return repository dot find by ID and I'm going to pass the ID okay simple method and I'm going to annotate this with at the red get mapping okay and this is going to be slash ID okay and I need to have the path variable this is going to be long so this ID it will be coming into this variable and we are going to pass this variable super cool you can see that three apis are created where we are able to post the data get the data and all the details okay so now we need to add the loggers as well so let me just add the loggers quickly so here when we save the department here right so we are going to add the logger that is logger.info Department ad we are calling right and what is the department and here I'm going to add that we are going to add Department find here because we are doing find all and here I am going to add find by ID that is the logarithm for Department find ID and what is the ID okay so you can see that it's simple logger that I've added nothing else okay now what I'll do is I will restart the department service so that we can utilize all these apis that we have created so let me just restart the service so here you can see that the service has started now if I go to the postman let me just start the postman okay so my application is running on 8081 currently okay so I have Port 8081 slash department and if I do get here you can see that I'm not getting any data okay so let me go to the body and add the data suppose I'm adding ids1 and department is ID okay and my request is post and I am hitting send so that I saved here you can see that ID and name is stored there is no employees okay so that's fine let me add two year computer science department and if I hit send you can see that I'm adding the data as well if I change post to get you can see that I am getting all the records here one and two if I send slash one I'm getting that record as well okay so you can see that all the data I am able to process with all the apis now if I go to browser if I go to Zipkin if I refresh it and run the query you can see that you are getting all the queries right we hit the department service right we hit the post we hit the get apis as well and you can see it is showing all the details there right like how much time it took okay if I go here you can see that how many services were involved there were only one Services involved that is only Department service so you can see that there was one call to the department service and if you hit on show if you can see you can deep dive into all the details like what happened for that particular service so this way you will be able to get much more information about what happened to the API request that you did and every details about it so this way you can see that Zipkin will help you to Traverse through your entire request like what happened where okay we just added one series as of now but we will add more services to it okay so here you can see that your department service is while working fine right and it is able to connect to your config server it is able to connect to your service registry it is able to connect to your Zipkin server as well and all your apis are working completely fine now let's go and create the employee service where we will be able to create the employees as well for a particular Department cool right so let's go to Spring initializer and here what we'll do is we will change the config server to employee service Employee Service okay and Java version s17 all the details are same we need Zipkin yes we need web yes then we need what we need other than Zipkin spring web we need config client right with config client we will be able to connect to the config server which Zipkin will be able to connect to Zipkin with springbab we are going to create our spring web application and with Eureka Discovery client we are going to connect to this service registry so I think that's it this all these are all the dependencies that we need for our employee service so let's create the employee service and open an IntelliJ IDEA so we'll go to the IntelliJ IDEA we'll go to me when we'll add the project and we are going to open the employee service okay so employee service is also added now we need to again here create this similar kind of apis here so we are going to do it very quickly okay rather than wasting time because we already know how to create the apis right we need to create controller repository model and bunch of different methods same as what we did in the department okay so we are going to do it very quickly so we'll go to the employee service we'll go to SRC Maven resources we are going to convert this to yaml okay and we are going to add the configurations here so here similarly we will give the name of the application and to which config server it needs to go and connect so we are going spring application name as employee service and it should go and connect to localhost 8080. if you go to the config server similarly what to Department service that we created will copy and create a new one that is the employee service.yaml file okay and here Employee Service dot yaml should be running on 8082 it should have connection to this and it should have management tracing sampling probability as 1.0 okay so here also Employee Service configuration is done and if we go to the employee service down below we will go to Java employee service and here we need to enable Discovery client okay so all your basic configurations are done now we need to create the apis so we will create the package that is the controller will create a package that is model and we are going to create a package that is Repository okay let me create a class that is employee controller okay let me create a repository that is employee Repository I am going to annotate with the red repository I'm going to annotate with at the rate rest controller okay and request mapping as well so request mapping and we're going to do the request mapping to slash employee and what I'm going to do is I already have the employee record available right so I'm just going to copy this and I'm going to paste in my employee model okay so you can see that employee record is created now ideally when you are creating the production grade application all these common classes you can separate out in the common service and you can have that common service added to your services that you are using okay that also you can do but this way it is completely fine now we need to have the employee repository created and the employee controller created so we are going to do it really quickly so I'm just going to copy the code because it is just a simple method that we did similar in the department service okay just to save some time okay so within this employee repository I'm going to create the list of employees here and this is the error list and this is the list okay now I'm going to create a method to add an employee to this list so this is a simple method Public Employee add employee and this employee I am adding into this list and I'm reading returning the employee simple thing right then I'm creating a method to find the employee by ID okay so you can see this is a simple method Public Employee find by ID I am taking the ID as input and what I'm doing is I am streaming through all the employees and I am filtering the ID based on the ID provided and finding the first if available if so that's good otherwise throw the error this is a very simple method this is the same method that we created in the department as well just the rose Department nearest employee and here this is a method to find all the employees I'm just returning all the employees with a list of employees here okay and here I am creating one more method to filter all the employees based on the department that is provided because if you see the employee object here right we have the department ID so so I need to filter out all the employees whose Department ID is common okay so this is a simple method for that you can see that this is the Public Employee find by department where we are getting the department ID okay I'm streaming through employees and filtering out based on the department ID this is similar to what we filtered out based on the employee ID okay so I am getting all the employees by Department ID and this is to convert to list so I'm just converting to list and this will return the list of employees because multiple employees will be belonging to a same Department okay so you can see that this four simple methods that I have created here okay similar thing we have to do in the controller we have to create the methods in the controller so let's go here and create it okay so within this controller I need two things I need the logger object for the employee controller and I need the object pointing to the employee repository as well so that is the two thing I have added that is the logger from sl4j okay so this is the employee controller and this is going to Auto wire yes employee repository yes so I have the object of employee repository and the logger now let's create the methods okay I'm just copying the simple method here okay don't freak out here this is a simple method is a Public Employee method add employee and this is the request body yes and I am just logging out that what employee that I'm going to save and I'm returning repository dot add method okay and this is a post mapping this is the same method that we created for the Department as well now let's create one more method to get all the employees okay so here this is a get mapping and I'm just want the list of employees okay and I'm just returning repository dot find all this we'll just return all the employee list okay now let's create a method to get the employee by ID so this is a method get mapping by ID Public Employee find by ID that we are going to pass okay I'm just printing the logs and I'm just calling the find by ID method okay we have done this so many times okay in the previous videos as well and in the previous Department as well in the department service so that's why we are going little bit faster here okay if you're facing still difficulties in any of the things if you are going it too fast then do let me know in the comment section below but these are just a simple methods okay this is not that much important this is just a basic that we are going to use in the next section so this is the get mapping to get a particular employee by ID now let's create one more method because we have created one repository method right to get the employee list by Department okay by Department ID we need to filter it out so for that we need to have one API as well so let's create one so I'm going to create it get mapping that is slash employee okay first thing is slash employee then slash Department then slash Department ID okay for this particular URL we are going to call the find by department so we will get the Department ID here okay this is a department ID and we are going to call the find by Department method which will return all the list of employees belonging to that department okay so here you can see that everything is done now what I have to do is I have to stop my config server restart my config server actually right and then I need to start the employee service so here you can see that Employee Service started if you go to config server you can see that the property is added now right for the employee service cool right so if I go back and see eight seven six one that is my service registry right you can see that department service and employee service both are connected now okay now if I go to postman I still have the Departments available okay my departments are still there now I need to go towards the employee so let me go here what I'll do is I'll do HTTP the employees are for the 8082 okay URL it's is 8082 we can reconfirm here okay it's 8082 for the employee service so this is the employee this is the get method employee okay and if it send there is no data available okay but we need to add it so what I'll do I'll go to the body Let Me Go to Raw Json data I'll copy the Json from here okay and what I need is I'll go to IntelliJ IDEA what is there in employee it is ID Department name so ID then Department ID right Department IDM giving is one name and giving us shabbir ID I'm giving is one after department at its name after that its age after name its age okay I'm going to add 28 age it is position okay so I'm going to add position here as well software engineer okay so you can see that this is the bunch of information so I'm going to do the post request here and I'm going to hit send so you can see the data is added now if I hit with id2 Department IDs 2 name as nickel 28 SSE that's all sent okay data has been added now if I change to get and if I hit send you can see that I'm getting the data that is the one student one employee sorry another employee if I hit with particular IDs I should get the same thing okay now if I do Department slash one I should get all the employees by Department okay so for the Department ID one I'm getting shabbir and for Department ID 2 I'm getting nickel okay so you can see that all my apis are completely working fine what I need one more API that I want to introduce okay this is going to be a very key concept where we will connect our department service to the employee service we will get the data based on the service registry that we have created and all the new features of spring boot 3 and spring framework six okay so with all these details we are going to connect so now this department service wants to connect to the employee service what I need is I want to list down all the Departments with its employee as well currently if you see here right currently if you go to postman if you go to Department okay and if I want to have the department one okay Department slash one sorry this department okay and if I hit you can see that I'm just getting the Departments I'm not getting the employees within that department but I want to have an API which will give me all the Departments and all its employees as well all right that's the API that I want to create so what I have to do is for that I have to have this department service get all the Departments from the department and for each and every Department I have to call the employee service and from this employee service I need to get all the employees belonging to that department ID right so that means I need to have one API call to this employee service also so how we are going to do that that is what we are going to do here so what we are going to do to connect Department service to employee service we are going to use the HTTP exchanger so HTTP exchange is a new part of the spring framework 6 and Sprint boot 3 so we are going to use that to have the declarative approach towards the creating the client for the employee service and we are going to connect all this thing using this service Registries load balancer we are not directly going to call this employee service URL directly because if there are multiple instances available we don't know which one to connect to right but service registry knows each and everything so we are going to call this service registry and we are going to tell Services history that I want this data from employee service now service registry is responsible to figure it out from which instance it should get the data and it should result it back right so you can see that now everything is coming into place right we created all the different components and now everything is connecting cohesively so now let's create the employee service that the employee client within the department service which will allow us to call the employee service internally okay so we'll go to the intelligi idea and let's do the magic so here we will go to the department service because within the department I want to call the employee service right so I'll go to the Department I'll go to Java everything here and here I need to create a client okay so what I'll do I'll create a package here and I'm going to create package as a client and what I'm going to do is within this client I'm going to create a new class and I'm going to tell as a employee client and I'm going to create this is the interface okay and this interface should be annotated with HTTP Exchange that's it okay so now this is your declarative line now now which method you want to call that you need to declare here okay so if you go to the employee controller I want to call this method okay so I'm just copying this I'm just copying the Declaration okay and I'm going to employ client and I'm adding here okay that I want to get mapping slash employee okay so I'm going to add slash employee here okay so I want slash employee slash Department Department ID and that is a find by Department method and it should go and get the Department ID okay it should pass the department ID and should get me the data okay so you can see that this is just a declaration that I have done here okay that I should go to employee client to this URL and get me the list of employees that's it now what I have to do is this is the Declaration now I need to have the configuration of the web client because ideally when we call the different web services we use using the web client okay because we are not going to use Restland because that is going to be deprecated so we are going to use the web client now web client is available within the reactive programming so we need to add the dependency of that reactive programming in our project as well so what we are going to do is we will go to Spring initializer okay and I'm going to add the reactive web dependency okay so now once the reactive web dependency is added if you go here and explore okay so the dependency which is added is spring boot starter web flux okay so this is the only one dependency so once this dependence is added just copy this go to IntelliJ IDEA go to your department service go to the palm.xml file of the department service and address dependency so now this will allow us to use the web client okay simple thing now once this is added what we have to do is we have to have the configuration of the web client like I need to make sure that once I create the web client now first thing see I created the employee client here right now you can see that this employee client is the interface I cannot refer to this interface directly until and unless I have the object of it right so if I go to this controller and if I want to add a web client uh sorry employee client right private employee client okay and if I auto wire it you can see that it will start giving me error that there is no bins available for the employee client because it is the interface created right there is no particularly been created so for that we need to add the configuration that whenever I am telling employee client it should create a bean of web client that points to employee service right so that is what we are going to do so I am going to create a new package here and I'm going to tell this as a config okay and within this config package I am going to create a new Java class and I am going to say web client config okay and I am going to annotate with upgrade configuration because these are the configurations simple thing right now let's add the configuration for the web client that should point to employee client okay so here I'm going to create method public web client and I'm going to name as a employee web client okay and I'm going to return web client dot Builder dot build now this is the web client object error that I have created and I am going to annotate with at the red beanier okay so I will get the web client bin now this web client should go and connect to my employee service my employee service is running on Port 8082 but how many ports that I don't know right how many uh instances it will have so what I have to do is I have to go and connect to what if I go to Eureka here is the employee service right so I need to tell web client that go and connect to employee hyphen service instance okay that is where you should go and connect to and give me the data I don't know what is the host name I don't know what is the port information I don't know I just know that there is a service available named employee service from there I want a data okay so that's what we are going to do so I'm going to just tell this that this is my base URL and the URL is HTTP call and employee service I know that there is only employee service available okay and from there you should go and connect to and give me the data now this employee service will be load balancer is because this is connected to the service registry okay now if anything is connected to service registry and its load balance we need to tell this web client as well that this is a load balance service and you need to have the filter for that as well okay so for that we are going to add a filter for load balancer so that web client will know that this is a load balancer service and whatever it should do the configuration and it should give me the data okay otherwise it won't be able to connect to it so I'm going to create the object of private load balanced exchange filter function okay and I'm just going to add the filter function here and this is going to be the Auto wired okay and now I can add this is a filter dot filter what filter filter this okay load balancer filter now I have the web client now using this web plant I need to tell that I want to connect to my employee service so I'll create the object of it okay so I'll just going to create Public Employee client employee client okay and I'm going to create the bean out of it now from where I'll get the employee client I need to use the HTTP service proxy Factory so I'm going to use http service proxy Factory equals to http service proxy Factory dot Builder dot build and within this Builder I need to use web client Builder Clan adapter dot for client what is the client my client is employee web client right so I'm going to pass employee web client okay so here you can see that my web employee web client has been attached to here and now I can return HTTP proxy service Dot create client for employee client dot class okay so now you can see that this all thing I have just done so that this from this Factory it will from this Factory I will be attaching the employee web services the web client this and from this web client I will get the object of the employee web client and it will go and connect to this employee service so now if I go to Department controller okay you can see that there it is gone now it has the object of employee client to connect to now you can see that now both are connected now I need to get the data okay so I'll create a method that will get me the data so what I need I need the similar method that is Department okay uh this one find all okay so what I'll do I'll just copy this and I'm going to create a new method okay I need list of departments and I need to have the mapping with student sorry with employees find all with employees okay now here you can see that other than this I'm just going to tell the stuff Department s equals to repository dot find also now here I am going to have all the Departments now I need to Loop through all the Departments and I need to call this employee client and to get all the employees for that particular Department cool right so let's do that so departments dot for each Department I am going to call department DOT set employees okay and I'm going to call employee client Dot find by Department and I'm going to pass department DOT get ID so this is going to be really long but let me just correct it out okay so here you can see that this is a simple thing that we did for each and every Department I am going to set all the employees and I'm going to call employee client dot find by department and I'm going to pass the department ID okay once that is done return departments so now here I'll get all the Departments and for each and every departments I'll call the employee client to get all the employees by Department ID I'm going to set each and every details and I'm going to return the Departments back okay so now you can see that I'm now connecting each and everything together so to run this whatever we will do is we will restart our application so my config server is already there so what I have to do is I have to just restart my department service okay so let me just restart it so here you can see that it has been restarted if I go to postman okay do I have any departments no I do not have any departments do I have any students let's check sorry do I have any employees yes I do have two employees one employee belongs to Department id1 one employee belongs to Department id2 right now if I go to Department okay nothing is created so let me just first go and create the department id1 that is it okay that is created let's go and create two that is CS that is created if I go and do get you can see that I'm getting all the Departments with the name okay without any employees but now if I do with employees and hit send there is some error so let's see what is the error so let me just see what is the error here employee find was called Department unexpect unexpected method invocation public abstract Department service client request person field illegal state okay so if we go employee client employee client is private this is auto wired okay if you go to the employee client it is HTTP exchange okay so here is the mistake that I did what I have to do is rather than using get mapping I have to use the get exchange here okay get mapping is to call but this is going to expose right I'm going to get the exchange data so this is going to be get exchange so this was a mistake here let me restart the department service now we might have to create the Departments again okay so the department service is again running now if you go back to the postman uh let's create the ID department and I'm going to do the post remove as it employees and it is created if I give two and CS it is created we'll go to get mapping to get all the employ departments yes now with employees and if I hit send you can see that I got the request successful and I'm getting the ID Department with employees and ID Department with employees and there was a call as well right and if I go here if I go to Zipkin and if I run query okay you can see that this is the API right so if I go and click on show you can see that it was able to get this data okay okay and there was failure as a light so that failure also is showing here okay if I go back to IntelliJ IDEA okay you can see that you are getting logs result in Department find employee find as well right for department id2 and everything so you can see all the logs and everything is completely working fine so if you go to this image again you can see that we created Department Service employee service as well both are able to communicate between each other as well using the HTTP exchange and service registry we created config server where we are exposing all our configuration from the config server and all the logs is are going back to the Zipkin server and we are able to see all the logs in the Zipkin as well right so everything you can see running completely fine now but you can see that currently in the postman I am calling Department with 8081 and I'm calling employee with 8082 so I am actually calling this individually right but I need to have a Gateway in between so let's go ahead and create the API Gateway and where we will add the configuration that all the department service should be called via Department all the employee service should be called via employee and with this API Gateway only we should be able to call both the services and each and everything okay so let's go ahead and create that so what we're going to do is we are going to go towards the spring initializer and I'm going to just remove each and everything okay and what I'm going to do is I'm going to do API Gateway okay I'm going to name it as the API Gateway and the packaging is 17 and now let's add the dependencies so I'm going to add the Gateway dependencies you can see that this is a spring Cloud routing provides a simple yet effective way to route to apis and provide cross cutting instance to them such as security monitoring and everything so this is what we are going to use for so we are going to use this Gateway we are going to use the actuator dependency for monitoring we are going to use the config client okay we are going to use the Zipkin dependency and we are going to add the Eureka Discovery client as well okay so you can see that these are all the dependencies that we need so let's generate the API Gateway and let's open an intelligent idea add here and I'm going to go to IntelliJ IDEA and I'm going to add the API Gateway project here now for this API Gateway we'll go to the SRC main resources and we are going to refactor to yaml file okay we are going to open the API Gateway application and we are going to enable Discovery client okay now here we need to add few of the details okay so here you can see that I'm just adding server.port that is 8060 so this EPA Gateway should run on Port 8060 and I'm adding the Eureka client service URL as default Zone that is 8761 Eureka okay so it should go and connect to this Eureka server okay so these are the details that I've added now we need to add the configuration for the Zipkin as well so similarly what we added earlier right so that is the same configuration we are going to add that is the management tracing sampling probability as 100 okay similar thing what we added earlier now what we have to do is we have to add the configuration for the API Gateway where we need to identify that all the requests coming from here should go to where okay so we are going to add spring dot application name that is going to be epi Gateway and now within the spring here we need to add cloud.gateway dot routes okay we need to add all the different routes here so spring Cloud Gateway routes now here within the route we need to Define like which API should go where to which Services okay so within this route there may be multiple lists we need to add the list here so we need to add ID and this is going to be employee service okay you should give the same name and within this you need to add the URI so URI should be load balancer colon the name of the service registry okay so this is employee service and then here you need to add the predicates So within this predicates you need to give the path which path it should belong to so path equals to this okay so here you can see that I am just giving simple thing that whenever I am doing localhost colon 8060 slash employee slash anything okay so whenever I'm calling EPA Gateway with Slash employee it should redirect all the traffic to Employee Service load balancer okay which is there connected to the service registry okay similar thing if I just copy this okay and here I'm going to tell this is the department service Department service and it should go to Department service when I'm calling Department okay so you can see that this is a simple route that I have defined right so whenever I call slash employee go to employee service whenever I Define slash Department go to Department service this way you can add multiples as well and you can if you want you can change the URLs as well okay whatever you want okay so whatever you will Define here that way it will redirect to the particular Services okay so this is the main configuration that will Define which services will be called based on the which URL okay now you can add all these configurations to the config server within this config server you need to create the file if you go to resources within the config you need to create a new file named API hyphen gateway.yaml and you can add all the configurations there I do not want to restart my services that's why I have not added there but you can so what I'll do I'll just go here and start my API Gateway first and there is some error so let's check okay so here it is saying that you we have added the config client right but we have not added the config Imports here so let me just add that so what I'll do I will just copy it from the application.dml file and here I'm going to add this uh let me go back to the okay so let me just restart now so now you can see that the API Gateway is also started and if you go to the browser here if you go to Eureka you can see that API Gateway is also connected here right so you can see our services are getting connected now if I go to postman and if I hit the same service you can see that I'm getting the data right with 8081 but now if I change to 8060 okay which is the port 4 my API Gateway okay and if I hit slash Department I should get the same data you can see I'm getting the same data because when I hit slash Department it identifies that it has to call the department service and within that department service I need to call with employees API so it was able to get me the data similarly if I go to employees currently you can see with 808 to Port I am able to get the department but if I change this port to 8060 okay and if I hit send you can see that I'm getting the data from that as well because it was able to identify it if I change to Department here then it will call the department and I will get the Department data rather than the employee data C I'm getting the department data now right so this way we will be able to get the data so now here you can see that we were able to implement all these services like config server API Gateway services and everything so first of all we created the service registry in our entire project today and within this service registry we created all the configurations where it will be a Services history which will allow the other services to connect to so we created the department series first and that department service was able to connect to service registry then we added the config server so we created a config server and after we created the config server we make sure that it is a native server rather than a git server right so we added the configuration for that as well once that was done what we did we again changed the department service and we added the config client dependency so now once the config line dependency is added it will able to connect to config server and within the department service we also added the configuration that which config server we should go and connect to so that also we added once that was done it was able to connect to config server and was able to fetch all the configurations then we created the Zipkin server using the docker I also showed you how to create using the jar as well okay so either of the things you can do to create the Zipkin server once that was done we added the Zipkin dependency within the department service so we can publish the Zipkin tracing dependencies we can publish the tracing information so once that was done we also added the configuration that hundred percent data should be published okay so once Department was done we added the apis in the department service then we created the employee service we added the same configuration to connect to services history to connect to config server to connect to Zipkin as well okay once all the apis were created what we did is we tried to connect each other as well using the HTTP exchange and this service registry so rather than just using the foreign port number we have not used that we took the help of the service registry and to identify host and Port information based on the service register itself because how many instances of the services available and how many instances are running or not we don't know so we took the help of service registry to identify and we give all the responsibility to service registry to identify each and everything and give us the data that's it so we use the springboot 3 spring framework 6 latest HTTP exchange to get all the details using the load balancer so once that was done we created the API Gateway as well and that Epi Gateway we used to submit all the requests via the public server and internally it will identify to which API server is which API service we need to pass on the request to okay so these all the things that we did within our project so you can see everything is covered within this project as a platform to get you started building micro Services there are different other components also involved if you want you can learn more through my course as well I have created a dedicated course in-depth course from building the micro services to deploying the micro services in the cloud platform using Docker and kubernetes where we have covered a lot more details and it is more than 18 hours of course so if you are interested you can go through that course as well but this will cover each and everything as always I'll share each and everything links and everything in the description below for you to check out the repository links and everything and if you have enjoyed this video don't forget to subscribe to my channel and hit a like on this video for YouTube algorithm so subscribe to my channel it will give a lot of motivation for me to create such videos like this and if you are interested you can also click on the join button to join my channel as always I'll see you in the next video till then Happy coding bye
Info
Channel: Daily Code Buffer
Views: 123,606
Rating: undefined out of 5
Keywords: spring boot, microservices tutorial, spring boot microservices, spring boot tutorial, spring boot cloud, spring service discovery, microservices using spring cloud, microservices using spring, spring cloud microservices, microservices example in spring boot, microservices example in spring cloud, daily code buffer, zipkin sleuth spring boot, api gateway microservices spring boot, microservices architecture, spring microservices, spring boot 3 microservices example
Id: HFl2dzhVuUo
Channel Id: undefined
Length: 85min 37sec (5137 seconds)
Published: Mon Apr 17 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.