Developing Microservices with Apache Camel

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
and hello so my name is Klaus Ibsen I'm based in Europe and I'm from Denmark gonna live in swim but here in New York I go by a much more cooler name my name is Klaus at least if you go to the coffee shop you can't give me is it the microphone okay so it's the club's well I thought it was known as camel born apparently I get a much more cooler name now so before the clouds I've been working a lot with a camel for the last seven years in that year in that time I also wrote a book about camel and stupidly I'm writing a second edition that book and speaking of the book I have a great deal for you so I'll just wait five minutes for you guys to order the books and there's a discount on 39 percent and using the code camel 39 so but feel free to try out a combination may become one hundred works well it's only coffee money no you don't get risk from writing books you still have to do real work okay so this talk is about apache camel so please raise your hand if you know about camel I tried it used it etc whoa that's quite a good so camel is awesome okay so for the guys that are not familiar of a camel I'll spend maybe five minutes talking about what it is so if you're going to learn about a new product a good idea is to go to that product website and read what they say so on the camel website we said camel is an integration framework and is based on enterprise integration patterns so the integration framework what is that well I like to picture that as the toolbox that has integrated there has tools for you to work with integration and then the other part what is enterprise integration talents well it's in fact a book with that same title so what happened was that the author of the book Gregor Hopi is Bobby wolves they were consultant and they went from client to client and saw the same problems over and over again and then they took down knows how to about these problems and how to solve them and so on and over time they compiled so much material that it came in to that book so how is Apache Cameron related to this book so this is where we're going to go in in a moment so in this book we have recipes to solve common integration problems and these are known as the enterprise integration pattern so we have Pat the solution for how to route misses based on the content how to filter the message how to split them and educate them and so on and so on okay so that's the book but where does camel come into that picture so for that I would like to explain that using a little example so amend that you have an integration problem and you can use the patterns from the book to find the solution and in this situation we have an example better order system so we have new orders coming in and then depending on the order we need to route either to a widget or get it in the book there's a solution called the content-based router and we can run on on the whiteboard you can draw it down using the graphical notation that we have here but that is graphically what we would like to do is to write down English word resolution so what you can do is say from new order then we need to make a choice when is digit to bicha otherwise to get it sorry if you guys can see in the back and but now be rolling down these words then we do add some parentis then we had some dots and a semicolon at the end and then we have these four words that are blue what is that so the new order that's an in point where we receive the orders from and in this example and this problems we are receiving orders from a message program called axiom queue on a queue call new order so we can write that down up in the tunnel then we need to figure out if the message is a vigil or not that's so we can use a predicate for that to look inside the message and determine if it's a widget or not and because the message is external based we can use X part as the predicate to determine them so we write it down then widget and cactus those are also in points this is where we want to send the order so if it's a bit adored it goes to that queue or if there's a gadget or it goes to the other queue so we write all this down and maybe you start to see where our camera comes in to the picture because all these words and parentis and semicolon is started looks like code it is code is Java code so Java code should be in a method so we take the code and put inside a method and we call this method configure and a method should be in a class and we put it this inside a class and we call this my route and hatred this is the first clue where Cameron come in because my route extends route builder and route builder is a classroom camel that allows you to define routes in the configure method so what we have here in is a solution for that problem we had before in camel code you can compile and run camel also allows you to inline those endpoints and predicates and whatnot directly into the route but this is the same solution maybe a bit shorter but still is readable for you as a developer and maybe even for your boss as well if you show him this code he will have a he or she will have it maybe I want to understand what is going on so also you can pay attention so the code here is abstracted away on a high level that allows you to focus about the business problem so camel abstract away all the low-level details how to connect to the message Berg how to pick up new methods when they arrive how to execute the expert predicate to determine if it's a digital not and how to send the message took you all that code is out of the box from camel and all you need to write it at the higher level at a high level using the enterprise patterns camel also lies allows you to define these routes in not Java code body in XML file so here is the same solution you can write in XML another powerful feature of a camel is that is easy to switch endpoints to different types so for example if we need to pick up orders not from a message queue but from the file system all we have to do is divide file and then the directory where these files are located each of these endpoints are that is a camel component you can customize them they have different parameters you can configure so if you want for example to say okay after I pick up the file is been fully processed at the end what should I do with the file well you can delete it or you can move it or you can leave it alone or something else so it fairly it does to say delete equals so now if I told you okay instead of picking up the files from a file system maybe you need to pick up from the FTP server so that will not be so hard to do because you can change the end point up here to it to P and then specify the server name and then maybe the port number and the directory and the username and the password and some other kind of a authentication but it's all configurable and you can do it up here without affecting anything of the rest of the code and speaking of code camel is just Java there's no hidden language the code you see here this pure Java code or XML there's no in-between it whatnot so you can get all the powerful features of your Java 8 as of today to assist you while you develop your camera so this is from idea screenshot just press control space and it can show you a list of all the enterprise patterns you can use while designing the routes and the editor can also show you Java Docs as well so you can get in line documentation as well while you work with camera and also your editor can help you with XML files because there's a scheming behind it they can also tells you which softies way patterns you can use and it has included documentation and so on and so on till please feel free to raise hand and if you have any questions during my talk ok so this is sort of like a 10,000 foot picture oh that was a question yes sir Oh well that's probably a question that is a bit later on but yeah but you can use different kind of camera components to do across context communication whether they are based well yeah sorry sorry but let's take that question off light because it's not so relevant currently for this one we need to move on but feel free to talk to us afterwards okay so this is the 10,000 foot of what is camel is so you have in the cinder camel context so camel context is sort of like camel is the runtime camel so the idea is that to this context you can add routes to it and need these routes you can you know use the enterprise patterns and new custom code and wanna routing transformation validation and so on and then to speak to the outside world you have camel components in the bottom we already saw a few of them we defile at DDMS and ftp and so on and speaking of components there's a lot of those we kind of lost track of keeping up to date how many components there are today but there is a roughly around 100 plus well that's a lie recently we introduced in something called camel catalog so that the camel catalog has a fully awareness with all the components you have with the documentation and so on and this is what we are utilizing in some of the tooling need providing but you as then usually you can also use the catalog as well so now we know that in fact 199 components in CHEM 216 and I'm asked to say component number 200 is a camel Cuba Natives component so so we have a lot of component okay so what is camel if you kind of think about this in pictures of me so I say can we sort of like a lightweight integration tool box then you have this book with all your enterprise patterns with the solutions then you can define routes and camel using those patterns and you custom code and whatnot and then you can use all these components to speak to the outside world and all these things together you have a nice little camel okay so that is camel nice logo okay so we move on to camel and Michael service excuse me so will it be a big surprise to you guys if I say that camel is awesome with micro-service now so when camel was created eight years ago by this gentleman over here it was designed as being a very lightweight symbol integration framework slash library that you can use any in any environment and platform of your choosing it's a small core back then it was probably only a half Mick but today's is grown in size it's maybe two mix but you know it's still notice still quite small and with camel you can run it in any kind of environment you don't need to back then you know when the dinosaurs ruled the world and everybody was using app servers you know camel did not so you can use camel outside those and it but it also both great in observers so it's your choice so what I'm saying is that back then it was maybe a bit controversial but camera works well as a standalone and then you can also use camel with spring XML files and with spring boot which is recent public choice you can use camel to CDI and or even the Google goose product and good old trusty applications and add any users of caress and J bus views then user don't we have something something for you guys as well about running caress as a micro service way and then there's for about while file and by force mom there is a product called Wi-Fi camel where this move in happens so pay attention to what they are doing we also talked about doing a native camel plugin for the bird export product is being planted it's not started yet but we will eventually get that done another public choice with micro services using rests so what we have done is to introduce the rest DSL in camel lightweight rest to yourself so you can specify service using arrest terms you're going to see that in a moment but going back to the standalone way is good old Java main which was back then when the dinosaurs ruled the world was the old-school way but these come back now so it's more like at the new school so how do we run camel in a standalone well you just have a public static void main class then you create a camel context then you add routes to it and then you start it this is how you start a camel eight years ago and this is how you do it today but that's good and that's also one of the great things about camel media do not sort of reinvent the wheel and try to rewrite camel every second year you know is to try to keep it stable over the years even though there are some changes once in a while but they are fairly easy to migrate ok so in this code we have the route anonymous inner classes and people often with camel they put the roused in two separate classes so we can take the route code and put into a different class and then when we start up can we just pass in a critic instructor route to the camel context that will be the same code now the start method is a non-blocking so you will have some trouble to keep that JVM running so what we have done is to introduce the main class you can use instead of as a camel main main trait that guy at the routes to it and run it and then you can say enable hangout support that means that camel will be able to track the trap if the JVM is being terminated and then allow us to do a graceful shutdown as well if you're using spring then you can do the same there's a spring main class and then you could refer to the spring XML files a public choice is to in recent years is to work with a spring dude so what you can do here is to use the camel spring Beauty component we have a class in there called a fat cow router so it allows you to specify your camera house in that class and then you can use all these standard facilities of spring boot with at beam annotation at component and so on and it's just and of spring good application and for CDI you just extend the normal repealer class and then you can specify this is camel context using that annotation context name and then you give it a name for the context then this route is associated with that context inside the route you can use two standard set of CDI notations add inject and so on to inject your resources and for this guy using gaybies views or carafe then we have something there going on so a passive carafe and give a fuse is it's like a traditional application server but it slows GI but still you have this application server and with the movement and the trend with micro service is to solve not using the application server but you just have you micro service or your application what you need so we really don't need to tag along a big chunky application server together with my application of my micro service so what I'll be doing with the elastic raft way so when you develop it up as a carafe you are using OSGi and you have to use those GI so we cannot throw that away even some people may want to do that but you cannot so for to run OSGi you need a nosedive framework and for that framework that is provided out-of-the-box from a passive graph so the idea is to take the smallest possible functionality from carafe to be able to boot up at North joy framer and and take that and then you can specify which carafe features you want to use correct feeders you for example that our camera components you can specify this camera components my camel applications are using these are the other features and then these additional bundles and Boatner they take all that and you feed it into a carafe maven plugin and what that plugin will do is to speed out a custom-built of carafe with your micro service of your application pre deployed in that one and only that as a tower zip file and think about it for a minute it's not a really controversial way of doing that but because you know for example the spring dude embed indirectly Apache Tomcat with your application as well so first is just a carafe container instead so in recent releases of camo be introduces rest DSL so the idea is that you know when you build micro-service a public choice is to use risk SD transport that's des protocol and we wanted to be able to specify your micro service in a restive way so that where you can use the risk perhaps more natural like a get in a post in the pool and so on also we wanted this DS service to be able to fix document themselves using this mega API and we also want is to be live it and allow you to choose which of the various page to treat or transpose you want to use to even induce deity or servlet or it's the Tomcat or no on the top or Nettie or whatever you can choose that and plug it in so here's an example of the rest service so in the in the regular class meteos a rest and there's a user service and we have a get we want to get the user buys ID so it's creepy one so it's a dynamic captured and then we call the being a user service beam we call a method call get user and passing that ID now on this rest service you can add additional verbs like a put and to update the user and we have another get to find all the users now you need to configure this read service so you can use rest configuration and then you can choose many of these camera components you want to use for the HTTP transport and this example I want to use maybe then I specify ok I want to be using a binding mode with Jason so what that means there is camel is automatic binding from Jason to your project classes and back again and then just adjacent that is being exposed by the arrest service we want them to be in pretty print mode so they look nice not just the one line and then the service expose on the root contact pass on port 8080 and then we can specify that this rest service is for adjacent consuming Jason and producing diesel you can also turn on spagett documentation out-of-the-box so what we need to do is to help here in the rest configuration we can use the API context path so we can specify a context part where you can end users can access this rest service and this is by a guy dot then you can specify some parameters or some properties to your wrist service those are so Vega API so it's a made title a diversion API whatever swagger offers you can type it there then in the rest DSL itself you can further annotate that to specify more for dispatcher documentation so you can add some description for the human still read and you can specify the input types and the output types and the parameters and so on all specified in the DSO there okay in the apache camel distribution that they only for documentation yeah we may be able to infer some of them a bit better than this but this is the way we could do it today and the public loves the use of the class and whatnot you can annotate those with the standard swaggity notations so it all to get a combined is able to produce that swagger documentation out of the box and in addition to this you just need to add the camel swagger Java module to the class part and it's out of the box and this service is also accessible over dmx so you don't have to use the rest code to execute but you can also access using DMX and this example is shipped in the pleasure chemist abuse and you can find it there and there's even a one where we build a wall file where we embed the swagger UI console from the that product so you get that nice weather UI console as well but I guess later on we hear more about swagger and Jason and a guy and governments and not from the API man team okay so let's go for the fun part let's build a micro service with camel so for this demo we going to use a very simple service we call it a micro service that is hello service so we on one side we have a camel application to expose that service and behave on the other side of course also a camel that cause this service so the idea is that you where you can call in specify the name and then the hello cells will greet you back saying hello Klaus I'm fine and whatnot so for the hello service we want to use a soup ESD transports so we can use Apache Tomcat as as a ball file to contain this service and for the standard for the client site we just want to use a standalone job and then become a rouse a very symbol on the server side it's just a fun servlet and do a message transformation on the client side because we want the client to trigger by itself we use a timer so every second every X second the time it triggers to be called a serve then we log in to build these service we can use maven archetypes so we have one archetype Emma Agatha Webb to build the web application and then another one to build standalone vuc di but you can also use you know any of the other spring but--of whatnot so to use maven archetypes you can use it from the command line from mavin mavin archetype : generate then it runs in an interactive mode where it generates a list of all the maven archetypes there is in the entire world and then that's like 1,000 or something it's hard to to navigate that so you can fill that type camel and swing it down and you can choose the one you want to use but it's tandem aim and so any kind of tooling support is as well so you can use here we saw in Eclipse an ID and whatnot the web archetype creates a product that is actually sort of provide surprise ready to use out of the box so if a symbol route it gives a high iron and a hostname and hello how are you so we don't have to do math in that code but the CGI example we need to change the code a bit because we need to call the HTTP service so for that we need to add a camera component that can speak HTTP so we're going to use native for that and then we're going to configure the camera endpoint to tell it which in point to call localhost 8080 and so on and then update the code a bit we need to set a header will be the name we want a specific call the service fit and the name we want to use a Java code to Kinneret the name so we just have a Java code we've changed the name to something and then we should be ready to run this so okay so let's be brave and go out in real demo mode no scripts no recording no nothing so this can only go one way right so here I have pre created the CDI archetype that's the only thing I've done and I loaded inside idea and I entered the presentation so that's why it looks up so funny so I have installed some of the tooling we have for camel is based on tables for CH and we have some Camel add-ons and also for kubernetes and subrogate that makes it very awesome to work with that but what we need to do is to add that SP components so you can use two fingers option command and then number four and then hope it survived yes it's a wipe so rebus force shows a list of available commands you can run and there's a one called caramel add there's a lot at endpoint and they say smell build that means Java so we want to add an endpoint case to be in point okay so far so good so and up here you can feel that the components based on sort of like the typed it is so we're looking for something that can do wasted P but they are sort of labeled with any kind of different things so it looks for something for social we have Facebook link name a slag and blah blah blah but they stay a sappy stuff we looking for so we're going to find not to do but HTTP and then the component name here this is a camel component that are relevant about ACP so we choose native or kind of like that one then we need to give it a name this is in points we call it Navy but you can type anything and now we need to configure that endpoint and the visit here is purely driven by that catalog I talked about before so it is able to slurp in the in information about each sort of common components how many options they have what type their answer on and then build the UI for that so this is a localhost and 8080 and it was my web camel hello and then I wanted to and we are the Osborne if T is able to keep alive and do a disconnect so we don't have session affinity so maybe if I want to run this application is more fun with lobe burnings and so we will immediately say hello to another one now the unity component has more options than this on this screen but I cheated a page so it had made a hack in the tooling to just show only the first page but you know Auto options so let's hope it works some code was added here in the bottom so it just added that entire endpoint for me of course if you're good at kam Li can type it by manual a lot of people can do that and if sword also works the other way around so you can eat it existing influence but not dat one there's a block there so I can choose the timeline step so you can choose the end points and I choose the timer now it says five thousand so let's just call it a bit quicker every second if a two-second let's call it and finish and maybe it works and maybe not yeah now says mm I had to stick the file so it update now it says to that okay so the other thing we need to change this T code here so we want to call set the header with name then we don't want to do a meta call and we go just going to be used at something we already have and then we going to call in Metis and remove that guy and log it now the route is almost ready then we need to change the beam and here we just say return and then some name what should I write and it's they're jacking it just called Jack you're saying you can't choose so who's Jack man so now we're ready now we can compile and run the code if we want but it's not so interesting to run this code standalone we want the goal is to run the code in a cloud environment Owen in open ship the kubernetes because that's more fun you know James said it was very awesome it is so so I'm not going to bore you guys to run it locally but if you do if you can see something like this it would call this a tomcat on the localhost 8080 and return to repack so how do you get this Java code running on on open shift and kubernetes well you need to use stagger or provide your application in dog image so how do we take this Java code you may have a new maven product and get that into a dog image well for that you can use the dog or maven plug-in that can take any kind of maven project and build a Duggar image for that now I say any kind but it depends on the kind and what are you using spring dude or Tom care or standalone and whatnot the tagamet in froggy is not just magic of working everything you need to tell it how to do it and so you need to configure it and you can do that by hand but it's not true to do for the first time for the new users to do that so what we have is some tooling that can help you with that again this is the day before we have some commands for that you can run the default tooling from a command line as well just put it up it Forge and then you can run the command there's a fabricate setup command that sets up this dog a plug-in and makes it ready for running in open ships or cubanelles you can also run it from your job editor like idea or clips about now again using that command alt for and choose it so I'm going to do that in a moment and when if you do that this is the sort of thing that it will add to your maven pom file the tooling is able to detect okay what kind of product are you doing this is standalone java is the spring guru is a tomcat or something else okay it's the camel heiress they're not and whatnot so you can sort of configure itself dependently then when you're done there you can use the dog a build command to build the Duggar image and if you do that for both the products you can look inside the data repository using dog image and you can see we have the CDI one that's declined and Deep Web is d'italia and then you can actually run them using dagger not in kubernetes but just playing dog or if you want but you know we want to take that step thread and run it Cuba needs so just before you're going to run it inside OpenShift I'll be ready for that so we have the dog image this didn't we have that one is I'll be ready for that not really because decline is using just being configured to use localhost 8080 to call that pillow service thought cane Adamic platform like Cuban eight is a noble ship that service is not on a local 8080 and both Tim and James have already talked about it what is the solution for that the most older term in the world pound so yeah it wins all the time so if you are adapt just say service so we need the hello world hello service Tomcat application to expose that service using community service yay okay and when we done that then we are ready so again what was the Cuba needed service well I think this is the guy that can explain it really well this is my worse or some worse so it's sort of like an abstraction or never connection to one of our parts and I think it said it was sort of like us that work together but the crucial point for me is that the service gets assigned an own IP and port number for the entire lifecycle of that service so you as a client just need to get that IP and port number one time and you can use it forever when you want to access this service so this is a paramount bit deep water so team you can help me so what happens is that when we deploy the hello service in kubernetes it gets enlisted in the kubernetes master in da key guy and then any existing node that is running they had to run a cube lab and part of the cupid execute proxy they get notified of any service changes so any existing note that running is being able to adapt the note now there's a new service and now the service died and were cut so when the client wants to communicate with that service is actually in without knowing it it actually used the cube proxy to access to service and the cube trucks is able to load bangs and choose the right wand and if you're not happy about their the load bangs that they provide you can build your own lino because human ear this is awesome it has public API it's just STM safe it's just ten lines of code and everybody's happy happy ok ok so how do we get that service defined inside the hello hello world know the Tomcat application how do you create that service again you can use some of the force tooling we have there's a command called fabric we need a service then you can as a visitor you can give the name you can specify the port numbers one is 40 in turn port number and the other one is the outside the internal one is the important one is the container port you have to use the port number of the Tomcat for example and Tom can use 8080 so that's good 8080 but the outside port number you can choose anyone you know steam said you are free to choose any one you can use number 80 if you like or something else but what I've seen often is that people maybe specify the same port number as the interim on and then people get confused because they may think you have to do that so they do keep doing that every time I don't like that so I always specify a different port number okay good question and the answer is coming here on slide so if you're on the wizard it modifies the palm file of your java product and it s these three lines where it says the service name the port container port and on the phone so you can do that manual as well but it does about it does yeah but we are not ready we need to expose that service and then to build the dagger image and and to build the kubernetes JSON file yeah maybe this is old school this is Jason is not llamo we have this fabricate maybe plug in James talked about there's a Jason Gil so as part of building your applications you run this girl and it spits out the Cuban adjacent file and you're ready to deploy that inside companies and I think it's time to try that out in just the wire yeah while just one last thing I would like to cover is from the don't worry you know we're going to see that in action in the moment so from the client side of you it wants to access the hello service it's no longer on localhost 8080 but is somewhere else we learn it was up it could assign an IP address by kubernetes and we specified port number 2 a 2 a 2 so at least we know the port number now but what is the IP address we don't know that that's clean that's been aside when you use deploy that service so what I've done here is to pre run this example quite surprised but so I need a remote access to one of decline and then I dumped all Yin environmental variables and as you can see the hello service has been assigned the hostname up there and deport normal so from the client point of view to access a service it's very easy because Q Benitez when it could up the depart every service get assigned gets signed into the container as a environmental levels in pairs of two with the host name and the port so you as a developer don't need to have any two Benitez Java library or any other client-side likely to look up those service it's just environmental Bible is easy to look up in any programming language and surprise surprise we made that even easy and camel so you can just specify the service name using squiggly squiggly service : than the name so what we need to do is to change the client code instead of using localhost 8080 is to service : name and then we should be ready okay that was quite a lot so let's go back to the code here and what we need to do on this guy is to use the service here instead of local host name and then we need to add the dagger plug-in so we can build a dog container so use the Force tooling and hope t-strap picks it up come on is here and comes up with a visa yeah they figured out there was a camel product so it's using unlike and it's a main class and there are some other options you can turn on us so now we click finish and really really hope it generated it just to make sure we take a look in the form file yeah it's a lot of things happen so here we have the dog a plug-in and I was configured and down here we have the fabric maven plug-in with the Jason go and then we have some additional maven profiles that makes it easier to deploy and build your application in just by referring to the profile instead of having a long command line a speed up okay so I'm try fabric aid local deploy and build that one I have already running kubernetes locally on this machine middle chip tree and I already deploy the Tomcat application so it's running and ah yes then is s8 not fabricate a steep roof on and don't you buy Roland choose to equality please just confuse people so okay so while it's deployed and I'm going to tuck away the that to show you the web console so you can't see any errors so this is the web console of propagate project and we can see here we have some parts and replication controllers and we have the service and that's sort of like a combined view of your parts and whatnot so over here if we are lucky then we should see the CDI coming up my CDI so that's the CDI one year and isn't and there's a my beep here so what we can do hopefully it will work is you can look inside that won't know it doesn't work some error and that's why you don't do the live demos so we try the other one so we look inside the Tomcat application that one that one works and you can see the camera out diagram it been clipped up here because I am a smaller screen so even it chips to screen no sadly enough but if I can click at the source code this is the route in the XML and if I could actually be brave I can change teeth here saying by instead of hello and as you can see but there's a Update button here so now I updated that route in real time but it's transient it's just if the it's not saved on disk anything you know if you kill the parties it's not update so it's just a plain things and so what I'm saying is that we can access this service we can try the service so you hit me so I created a script that is exiting this disturbance using coal and invite up so it will call this service the hello service let's try to run that one it me New York and here is a spy because I changed it not at that one the least that the script works but not decoded roadworks some reason so one thing I think Tim has already shown you can scale up and down the parts the console is here so I can go to the controllers instead of having only one heart running the Tomcat application I can scale it up for three for example scale it up and they are currently being scaled up you can see there's two pending there's one currently running and two on the way so these two shall be green in the moment now they are all green if I look at the script we should be able to see the script change between the different parts to the actual running on if it works now you can see it's always the same guy but now the new guy came in now the three different ones so sort of like the same as Tim so yeah java sucks and best works what about the time I'm pretty much done okay okay sorry about the demo didn't work I could also just cheated and deployed the CDI one and just start that well at least I get points for trying I hope so then there's some command lines instead of the cube CTL and what do you call it Tim the cube cuddle okay that's the new okay thanks so I'll learn something so instead of you can cube cuddle you can use OC as well but it's taken to book both are awesome you can get the powers you can get a service you can look inside the logs you can get the routes and this is H a proxy for mobile ships so you can actually access the service from your web browser using DNS you can change the scale them up and down and they'll open and ok so in the flight you
Info
Channel: Red Hat Middleware
Views: 56,708
Rating: 4.8823528 out of 5
Keywords: Red Hat Software (Venture Funded Company), Red Hat Linux (Operating System), Red Hat Enterprise Linux (Operating System), Kubernetes, Java Developers, Java, Programming Language (Software Genre), Software (Industry), JBoss (Venture Funded Company), Container Management, Java (Programming Language), Microservices, Apache Camel, Red Hat JBoss Fuse, Apache Software Foundation (Membership Organization)
Id: 91UiQgazt3g
Channel Id: undefined
Length: 47min 2sec (2822 seconds)
Published: Tue Dec 15 2015
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.