Managing deployments for nodes running Camel routes - deployment

I have an enterprise application that uses Camel routes and need to be able to provision/start/stop nodes running these Camel routes on multiple machines.
I am looking at Apache Karaf and JBoss Switchyard as 2 solutions to help me deploy and manage these routes. I think I understand the value of Apache Karaf since it is a osgi container and I can un/deploy new routes into it. Will JBoss Switchyard also help me for this issue?

JBoss Fuse
JBoss Fuse which includes Fuse Fabric can manage and provision containers in a cluster / cloud / etc.
http://fuse.fusesource.org/fabric/
JBoss Fuse uses Karaf as the container. So what you can do with Karaf you can do as well with JBoss Fuse.
On top of that Fuse Fabric brings to the table, all the cluster provisioning and management. And with a distributed registry for HA et all.
With JBoss Fuse you can deploy and manage your Camel routes in a cluster. And perform rolling upgrades / downgrades across the nodes in the cluster, and much more. And to go along with that you have commands in the Karaf Shell to perform actions, and as well a web console UI based on http://hawt.io/.
Short answer: Yes JBoss Fuse can manage and provision your Camel routes in a cluster.
SwitchYard
In terms of JBoss SwitchYard, then it uses JBoss Application Server / WildFly as its container (at this time of writing SY does not yet support OSGi). So SY leverages the clustering and management support from JBoss Application Server.

Yes with Apache Karaf you'll be able to deploy/undeploy routes by either installing the appropriate bundle or by installing the corresponding blueprint.xml (containing the route) as Karaf supports deploying of various xml files (which are generated to bundles at runtime). This will give you an easy way of deploying / Developing. Also available with karaf is the def:watch command, it'll help you with developing Bundles cause it will watch your file/maven-repo location for updates and will install those immediately in the container.
For distributing your routes throughout a cluster there is also Apache Karaf - Cellar, a subproject for maintaining Cluster ability for the Karaf container.

take a look at Zookeeper and its support for distributed route policies...
also, check out these master election examples
http://www.systemmobile.com/?p=399
http://frommyworkshop.blogspot.com/2013/06/leader-election-of-camel-router-through.html

Related

How to run SCDF using weblogic?

I am trying to use Weblogic instead of Tomcat to bring up SCDF locally. I am unable to find the respective guide on spring.io. Any pointer would help.
Spring Cloud Data Flow builds on the Spring Boot foundation. We ship the uber-jar binary through Maven Central and/or as a container image in DockerHub or Bitnami.
You would start/run the shipped binary stand alone either in the bare-metal VMs or in a container orchestration platforms like Kubernetes.
Weblogic doesn't fit any of the functional and non-functional requirements that we expect (in SCDF) to be useful for a production setting. Simply put, you won't be able to run SCDF in Weblogic.
Please consider experimenting with SCDF using Docker Compose or Kubernetes instead.

JBoss Switchyard Metrics - where to find the data in the server?

I'm using JBoss AS7 and can see metrics in the following link in the Admin console in my build environment.
http://localhost:10090/console/App.html#sy-metrics
But we don't have the console running in Production nor JMX.
Does JBoss store the metrics somewhere in the server installation which can be extracted for use? It will be useful to find out the services and the methods which are the biggest bottlenecks so that we can improve them.
There's no store of server metrics - you can use something like JBoss Operations Network (https://www.redhat.com/en/technologies/jboss-middleware/operations-network) to collect them, or if you enable JMX you could probably collect them in Prometheus.
I'm not sure whether you are using Fuse 6 or whether you are using community SwitchYard on top of AS 7 - if you're using Fuse 6, you can probably access the JMX beans through hawtio's jolokia instance.

How Karaf and Fabric containers are related?

I have installed jboss-fuse-karaf-6.3.0 and created a project in developer studio.
I'm not able to figure out certain concepts around it.
In Apache Fuse how Karaf and Fabric containers are related ? What I understood is Karaf provides runtime environment for the project to run. Fabric is for managing deployments. Is that correct ?
I have started Karaf container by running FuseInstall/bin/start.bat . How to start the fabric container ?
Is http://localhost:8181/hawtio is fabric console ?
Is there a way to directly deploy a project to Karaf container using maven ? or we need to deploy the project to fabric ?
Thanks !
Fuse is an ESB product by Redhat. And yes, you understood it correctly that Karaf provides an OSGI runtime whereas Fabric is for managing multi-container deployments.
You don't start a fabric container. You need a Fabric agent or something similar for that. Not very familiar with it, but you can refer Fuse's documentation here and here regarding this.
Hawtio is basically a visual management console for various containers.
You can definitely deploy your OSGI bundle directly into a Karaf container. There are various commands such as :osgi:install " OR placing the bundle at FuseInstallDir/deploy. The Documentation it explains much better.
A Fabric is just a group of commonly managed Karaf containers. It lets you manage your containers using Profiles instead of just features and bundles.
Once you have started a Karaf container you can CREATE a Fabric. Follow these instructions: https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.2.1/html-single/Fabric_Guide/index.html#Deploy-Fabric-Create . Any other Karaf containers you start will then be JOINED to the existing Fabric.
Once the Fabric has been created, localhost:8181/hawtio will have Fabric specific content
If you are using Fabric, then you can use the fabric8 Maven plugin to deploy your application to a Profile directly. See more details here: https://fabric8.io/gitbook/mavenPlugin.html . Basically you can just run mvn fabric8:deploy and it will update the fabric to use your new code. Be careful here as this will tell Fabric where to find your new code in its list of Maven repos. If you have not deployed your code to a central or shared repo and it is only on your local machine, and the container that is getting the deployment is on a separate machine, it will not work.
Be sure to read up on how profiles work as well, because adding your code to a profile does not add it to a container unless that container is already set up to include the profile you are updating. The fabric guide I linked first explains this well.

Configure IBM HTTP server for Jboss Application server

Recently we have moved our application from websphere to jboss application server.
IBM Http server (IHS) has front ended(proxy) the websphere application server.
Now we want to make changes to httpd.conf to make the IHS to front end the jboss. So whats the configuration to be done at IHS server to act like reverse proxy for JBOSS application server?
There's really no reason to do this, because IBM HTTP Server is only ever supported when it's used with IBM software that it was bundled with.
If you do do it, you're nearly alone in doing so and w/o the assistance of IBM.
Technically, you could use mod_proxy_balancer and mod_proxy_http just like any other Apache-based server, but they're not as well maintained because they are only used in one very obscure/withdrawn IBM product that bundles IHS. It's a basic proxy configuration for Apache and not really worth going into detail here.
The best option for JBoss AS/Wildfly application server proxy for you is Apache HTTP Server with mod_cluster.
Community
You can give it a try with Fedora: mod_cluster package
And there is an example on how to compile it from sources and configure it with Apache HTTP Server from scratch: example, recorded terminal session. It also operates on Windows and Solaris.
Why mod_cluster over mod_jk/mod_proxy?
The main benefit of mod_cluster over mod_proxy*balancer / mod_jk solutions is that both JBoss AS and Wildfly contain mod_cluster subsystems that automatically report deployed contexts and life cycle events to the mod_cluster balancer in Apache HTTP Server. JBoss AS/Wildfly workers join Apache HTTP Server balancer automatically, you don't have to reconfigure anything in your httpd.conf nor restart httpd when you add another JBoss AS/Wildfly worker.
Current load report is also a part of these service messages. One may use several different load metrics within JBoss AS/Wildfly, e.g. heap utilization, CPU load, number of currently open sessions, or one could easily implement a custom load metric.
The result is a high-throughput dynamic load balancer that takes into account actual utilization of your JBoss AS/Wildfly workers.
Commercial support
If you need a fully supported solution for mod_cluster balancer, both Red Hat JBoss Web Server, i.e. Apache HTTP Server, mod_cluster, OpenSSL, Tomcat 7, Tomcat 8, mod_jk, ModSecurity, and Red Hat JBoss Enterprise Application Platform (EAP), i.e. application server built on Wildfly 10+ or AS 7+, entitle you to fully supported mod_cluster balancer fronting either Tomcat workers or EAP workers.
Full Disclosure: I am an engineer at Red Hat

JBoss Fuse - Can we replace dependency on ActiveMQ to WebSphereMQ?

I would like to avoid dependency on ActiveMQ. Is there a way to make JBossFuse to use WebSphereMQ ? (I'm assuming activeMQ is required for framework to run - internal dependency)
The description on jboss fuse site reads like..
Core messaging is provided by Apache ActiveMQ, services framework (SOAP, XML/HTTP, RESTful HTTP)...
PS:
Arguements like "it would be innefficient, expensive" etc, need not be considered at this stage. Reason for prefering WebSphereMQ is beyond my control.
No you can use JBoss Fuse without ActiveMQ at all. For example the minimal distribution does not come with AMQ pre-installed.
JBoss Fuse allows you to slice and dice what you want pre-installed.
If you want to use WebSphereMQ then you can do that, though that would be under the assumption that WebSphereMQ as a server is running in another JVM / box. And that JBoss Fuse would act as a client to that broker. If so you can install the WebSphereMQ Java Client JARs in Jboss Fuse and use that.