Inbound Endpoint is an endpoint which resides in server side of the ESB. Those are introduced to achieve some of the main features like multi tenancy support for some protocols like JMS, by passing axis2 layer in Inbound side,deploying and undeploying inbound endpoints without server restarting.
Basically there are two behaviours introduced. Selection of the behaviour is done according to protocol.
- Polling behaviour
Polling behaviour
This behaviour is in JMS, File and Generic Inbound Endpoints. Basically it polls periodically for data with some Conditions and if Conditions is ok then injects that data to given sequence. for example in JMS inbound Endpoint it checks for JMS Queue periodically whether the data is available if so then take that message and inject it to given sequence.So this kind of inbound endpoints have one way operation. It does not require a result so in nature these are asynchronous.
Listening behaviour
This behaviour is in HTTP and CXF-RS inbound endpoints. Basically listener is started in given port and it listens for requests coming to that port. When request is available it injects that request to the given sequence.Here those have two way operation and in nature those are synchronous.
Inbound Endpoint Configuration
<inboundEndpoint xmlns="http://ws.apache.org/ns/synapse"
name="feedep"
sequence="TestIn"
onError="fault"
protocol="http"
suspend="false">
<parameters>
<parameter name="inbound.http.port">8085</parameter>
</parameters>
</inboundEndpoint>
According to the above configuration generic parameters for inbound endpoints are added as attributes in inboundEndpoint element and protocol specific parameters are given in the parameters element.
Thread Pools in InboundEndpoint
We need threadpool to execute message injectors to the sequence. Message Injectors are handle by thread pool which avoids blocking in the message consumers from the source or listeners for the source.
There are three options that can be taken.
- Per inbound thread pool.
- Protocol specific thread pool.
- One thread pool for all inbound endpoints.
currently we are having thread pool per inbound and we need to make it configurable.
Multi Tenancy in InboundEndpoint
Multi Tenancy means more tenants are operated in single physical location with logically separated manner. So each tenant can have more inbound endpoints. so when introducing this there are major problems that we need to solved. Basically one way protocols like JMS, File and Generic are run top of the task since tasks are handling multi tenancy we don't need to separately handle it.
But in Listening endpoints like Http and CXF-RS need to handle multi tenancy. So basic problem that we faced is port sharing and tenant unloading. we need to do port sharing between tenants because number of ports are limited.When tenant loading and unloading synapse environment also get loaded and unloaded. So we keep common handler and Listener always running and in runtime we get the synapse environment and get inbound endpoints through it and do the relevant operations.
Clustering
This is achieved by using hazelcast framework and distributed locks.
Reference
No comments:
Post a Comment