Footprint of integration applications in Mule ESB - mule

I want to have a shared Mule ESB server where I'm going to deploy many integration apps. Most of them are similar but with different parameters and they have to be independent from each other.
I want to know how many integration applications can a deploy in one Mule ESB container. I'm not so worried about CPU usage because that's easily balanced having many servers, but I'm more concerned about memory usage or any other Mule ESB limitation.
I understand that memory usage of integration apps depends on the integration you are deploying to Mule ESB, but would be good to understand the overhead of deploying of a new app. Does it load all Mule classes again? Does it reuse what's already loaded? All applications are active all the time consuming memory or they are put to sleep while they are inactive?
For example, deploying Mule ESB without apps consumes 100MB, then deploying one app consumes 120MB, can I conclude that each integration application of the same type will consume 20MB?

Related

What's the best way to have a Mule ESB flow monitor a Hazelcast Distributed Queue?

I have a cluster of Mule ESB containers, each of which is running an (identical) application which share responsibility for handling work which arrives as objects in a Hazelcast Distributed Queue.
Question: What's the best way to have these applications monitor the queue?
Conceptually, I imagine a "Hazelcast Queue Endpoint" that sits blocked on the queue until an object shows up-- but I'm not quite sure how to realize this.
(Mule ESB 3.3, community edition).
Thanks.
I would use DevKit to create a custom a Hazelcast Queue Endpoint and build it as a custom module.
This custom module would be usable in Studio and raw Mule.

Mule Inter - App communication in same instance

I have explored the web on MULE and got to understand that for Apps to communicate among themselves - even if they are deployed in the same Mule instance - they will have to use either TCP, HTTP or JMS transports.
VM isn't supported.
However I find this a bit contradictory to ESB principles. We should ideally be able to define EndPoints in and ESB and connect to that using any Transport? I may be wrong.
Also since all the apps are sharing the same JVM one would expect to be able to communicate via the in-memory VM queue rather than relying on a transactionless HTTP protocol, or TCP where number of connections one can make is dependent on server resources. Even for JMS we need to define and manage another queue and for heavy usage that may have impact on performances. Though I agree if we have distributed and clustered systems may be HTTP or JMS will be only options.
Is there any plan to incorporate VM as a inter-app communication protocol or is there any other way one Flow can communicate with another Flow Endpoint but in different app?
EDIT : - Answer from Mulesoft
http://forum.mulesoft.org/mulesoft/topics/concept_of_endpoint_and_inter_app_communication
Yes, we are thinking about inter-app communication for a future release.
Still is not clear when we are going to do it but we have a couple of ideas on how we want this feature to behave. We may create a server level configuration in which you can define resources to use in all your apps. There you would be able to define a VM connector and use it to send messages between apps in the same server.
As I said, this is just an idea.
Regarding the usage of VM as inter-app communication, only MuleSoft can answer if VM will have a future feature or not.
I don't think it's contradictory to the ESB principle. The "container" feature is pretty well defined in David A Chappell's "Enterprise Service Bus book" chapter 6. The container should try it's best to keep the applications isolated.
This will provide some benefits like "independently deployable integration services" (same chapter), easier clusterization, and other goodies.
You should approach same VM inter-app communications as if they where between apps placed in different servers.
Seems that Mule added in 3.5 version, a feature to enable communication between apps deployed in the same server. But sharing a VM connector is only available in the Enterprise edition.
Info:
http://www.mulesoft.org/documentation/display/current/Shared+Resources#SharedResources-DefiningDomains
Example:
http://blogs.mulesoft.org/optimize-resource-utilization-mule-shared-resources/

Mule ESB integration with web applications

We have more than 5 corporate applications running on different servers with technologies like spring, struts communication between these application is point to point. We are planning to migrate this to ESB using Mule.
I didnt quite understand how mule works i have few doubts,
Mule is running in a different server do i need to deploy all my 5 aplications into the mule server.
I have spring application delployed on a tomcat server how this application is going to receive messages through mule or what are the configuration changes i need to do in my server or mule server.
Any advice or tutorials.
You need not deploy all you 5 applications in the Mule Server.
You said that all your application are currently point to point (which means that all are talking/communicating now through http protocol), similarly you can also use mule's http endpoints to communicate with all the 5 applications.
I.e. the spring application talking to another spring application can be modified to Spring application talking to Mule and Mule in turn talking to another Spring application .
You must learn the basics from the Documentation
http://www.mulesoft.org/documentation/display/current/Mule+Fundamentals --> browse through the navigation on the lefthand side.
Mule is an integration tool. you no need to change any of your existing applications. All you need is to develop an mule application which can do the mediation/orchestration.
For connecting with your spring application you no need to change any configuration you need to use http:outbound connector inside your mule flow
Just go through http://www.mulesoft.org/documentation/display/current/HTTP+Transport+Reference
So mule is based on SOA principle, so your 5 corporate service need not to be their in a single system. so if you want to consume the service/functionality of any of your 5 application, expose those service as web service, cloud be soap or rest. And you can call those service inside your mule. so in this case you have to create only 5 connection and where ever required you can refer to those connection inside mule configuration file.
#saravanan shanmugavel you need to use Mule ESB to orchestrate the communication between these application...ESB came into the picture to remove your point to point communication...you can create a proxy service for each of your service and one flow which will orchestrate communication between all...
All you need to do is change the application that is configurable according to mule server.
Please refer below link that will be helpful for understanding of mule that helps you better orchestrate communication between all.
https://docs.mulesoft.com/

AMQP AmqpBinding IIS/WAS problems?

The setup at the current employer has one set of back office functions on a Java platform and another group of functions on two separate .NET-based platforms. There is no overall architect.
The Java guys decided to go for Apache QPID and AMQP for messaging, presumably amongst themselves, with the .NET systems and other external systems.
.NET architecture involves WCF services hosted in IIS/WAS and Windows Server AppFabric.
Does anyone have any experience of AmqpBinding and IIS/WAS, if there are any possible pitfalls?
I think your first problem will be IIS/WAS/AppFabric because non HTTP services hosted in WAS have additional requirements for infrastructure which consists of additional process (listener) running usually as as a windows service and communicating with worker process. This process is responsible for receiving and sending messages and allows service activation in WAS. I don't think that the QPID project has the listener process already created. You will most probably have to implement the listener yourselves - check this sample for custom UDP activator.

What is a VM transport in the context of an ESB?

I'm reading the Mule ESB documentation, and there is a lot of references to VM Queues. Is this some sort of JMS implementation? What is meant by it, and where can I find more info?
Thanks in advance,
It is a Mule specific transport for messaging within the same VM (i.e. the mule standalone server or the tomcat instance mule has been deployed to). The transport can implement queuing with in-memory or on-disk storage, but there aren't any reliability guarantees.
See here:
http://www.mulesoft.org/documentation/display/MULE2USER/VM+Transport
http://mulesux.tumblr.com/post/3102264921/murphys-law-or-dropping-the-ball
I've never worked with Mule, but I read some docs a few years ago.
I believe VM queues would reside in memory within the JVM. I think it's a way to use SOA constructs between Java Beans, so that local POJO methods can be treated as services. That way, if you some day want to replace that POJO with an external service or host it elsewhere, you only have to change the configuration of that service.
This is all conjecture from the small amount of Mule I recall, so definitely verify, verify, verify. :-)