Hi all,


I got the IP address (all network interfaces), AMQP port and SSL AMQP port
then store database at broker startup. When node goes down that details are
removed from the database.



[image: Inline image 1]





All the interface details get using the OSGI service. There is a
configuration on the broker.xml we want to define classpath on that
specific implementation.



*<dynamicDiscovery>org.wso2.carbon.andes.discovery.LocalCluster</dynamicDiscovery>*



I wrote an admin service to get those database details at the carbon
business module. For that service I introduce new permission on the
permission tree named as “dynamicDiscovery”



Web service result is like this,



*<IpList>*

*<node id="NODE:**10.100.4.165:4000* <http://10.100.4.165:4000/>*">*

*   <addresses>*

*            <address ip="10.100.4.165" port="5672" ssl-port="8672"
interface-name="wlp3s0"/>     *

*       <address ip="192.168.11.50" port="5672" ssl-port="8672"
interface-name="enp0s25"/>*

*   </addresses>*

*</node>*

*<node id="NODE:**10.100.4.166:4000* <http://10.100.4.166:4000/>*">*

*    <addresses>*

*        <address ip="10.100.4.166" port="5672" ssl-port="8672"
interface-name="wlp3s0"/>*

*    </addresses>*

*</node>*

*</IpList>*



In Andes client, I implemented a new initialContextFactory and inside that,
I made an AMQP URL using the result of the web service.




[image: Inline image 3]




Inside the Andes client, I called that web service to get the cluster node
IP address and ports details. When calling web service it shuffles (DNS
Round Robin)  the IP address and gives String to the client. Using this,
create AMQP URL inside the Andes client, Other URLs put as a failover.
Periodically call the web service and update the broker list.




In my implementation developer not need to create the AMQP url inside
the JMS client program it is automatically created the the Andes client.
Developer need to set those properties when initialling the client.



*Properties properties = new Properties();*

*properties.put(Context.INITIAL_CONTEXT_FACTORY, QPID_ICF);*

*properties.put(DiscoveryValues.AUTHENTICATION_CLIENT, USER_NAME +","+
PASSWORD);*

*properties.put(DiscoveryValues.CF_NAME_PREFIX + DiscoveryValues.CF_NAME,
INITIAL_ADDRESSES);*

*properties.put(DiscoveryValues.CARBON_PROPERTIES, "" + CARBON_CLIENT_ID +
"," + CARBON_VIRTUAL_HOST_NAME + "");*

*properties.put(DiscoveryValues.FAILOVER_PROPERTIES, "RETRIES=" + RETRIES +
",CONNECTION_DELAY=" +*

*               CONNECTION_DELAY + ",CYCLE_COUNT=" + CYCLE_COUNT + "");*

*properties.put(DiscoveryValues.TRUSTSTORE, TRUSTSTORE_LOCATION);*



I tested it using 2 offset cluster. (1000 subscriptions and 50 messages).
Better load balance with 2 nodes.

I tested it using 3 offset cluster. (500 subscriptions and 50 messages).
Better load balance with 3 nodes.



This is my PR,

https://github.com/wso2/product-mb/pull/445
https://github.com/wso2/carbon-business-messaging/pull/367
https://github.com/wso2/andes/pull/741



Feature tracking - https://wso2.org/jira/browse/MB-1872


Article - https://redmine.wso2.com/issues/5659


References

https://medium.com/@sidath


On Wed, Nov 16, 2016 at 12:02 PM, Sidath Weerasinghe <sid...@wso2.com>
wrote:

> Hi all,
>
>
> This is regarding the retrieval of IP addresses of a node.
>
> In the local cluster, I could retrieve the IP addresses of all network
> interfaces, the AMQP port and the AMQP SSL port in order to store them  in
> the database at broker startup. When a node shuts down, details of the
> removed node are removed from the database by the cluster coordinator.
>
> In an AWS cluster, I could get the private and public IP of the instance
> and store in the database at broker startup. When a node shuts down,
> details of the removed node are removed from the database by the cluster
> coordinator.
>
> Since these are two different implementations, I am planning to have a
> configuration for this in the broker.xml file as follows:
>
> <dynamicDiscovery>mode</dynamicDiscovery>
> where the mode can be one of "AwsIpAddressRetriever" and
> "LocalIpAddressRetriever"
>
>
> any ideas ?
>
> On Thu, Oct 20, 2016 at 2:07 PM, Sidath Weerasinghe <sid...@wso2.com>
> wrote:
>
>> Hi Asanka,
>>
>> I get the Node Id from CoordinationConfigurableClusterAgent class. There
>> is no validation for that.
>> I changed XML structure according to the standards.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *<node id="NODE:10.100.4.165:4000 <http://10.100.4.165:4000>">
>> <addresses>       <address ip="10.100.4.165" port="5672" ssl-port="8672"
>> interface-name="wlp3s0"/>             <address ip="192.168.11.50"
>> port="5672" ssl-port="8672" interface-name="enp0s25"/>
>> </addresses></node><node id="NODE:10.100.4.166:4000
>> <http://10.100.4.166:4000>">    <addresses>        <address
>> ip="10.100.4.166" port="5672" ssl-port="8672" interface-name="wlp3s0"/>
>> </addresses></node>*
>>
>> On Thu, Oct 20, 2016 at 12:05 PM, Asanka Abeyweera <asank...@wso2.com>
>> wrote:
>>
>>> Hi Sidath,
>>>
>>> What was the reason to use *PascalCase* for attribute names? In HTML
>>> for attributes we normally use all lower case with hyphens [1]. Maybe we
>>> should adhere to the same style. WDYT?
>>>
>>> Do we currently have any character restrictions on the Node id? Are we
>>> escaping the reserved characters in values before generating the XML?
>>>
>>> [1] http://www.w3schools.com/tags/ref_attributes.asp
>>>
>>> On Thu, Oct 20, 2016 at 11:49 AM, Sidath Weerasinghe <sid...@wso2.com>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> Andes client invokes the admin service to get IP address and ports of
>>>> the live nodes in the cluster.
>>>> Admin service makes XML structure  and sends that string to the client
>>>> who invokes the service.
>>>>
>>>> Previous XML structure is changed. Here is the new structure of the XML,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *<Node Id = "NODE:10.100.4.165:4000 <http://10.100.4.165:4000>">
>>>> <Addresses>        <Address Ip="10.100.4.165", Port="5672", SslPort =
>>>> "8672", InterfaceName="wlp3s0"></Address>        <Address
>>>> Ip="192.168.11.50", Port="5672", SslPort = "8672",
>>>> InterfaceName="enp0s25"></Address>    </Addresses></Node><Node Id =
>>>> "NODE:10.100.4.166:4000 <http://10.100.4.166:4000>">    <Addresses>
>>>> <Address Ip="10.100.4.166", Port="5672", SslPort = "8672",
>>>> InterfaceName="wlp3s0"></Address>    </Addresses></Node>*
>>>> Any comments?
>>>>
>>>> On Fri, Oct 7, 2016 at 7:57 AM, Sidath Weerasinghe <sid...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> Then we can use java Socket isconnected() method for this. It returns true
>>>>> if the socket was successfully bound to an address.
>>>>>
>>>>> On Thu, Oct 6, 2016 at 1:50 PM, Pamod Sylvester <pa...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>> Asanka's point is valid. Sending a ping request could have the
>>>>>> constraint of having a particular port being blocked i.e by firewall etc.
>>>>>>
>>>>>> How about sending a TCP heartbeat to the AMQP/MQTT port itself ?
>>>>>>  wdyt ?
>>>>>>
>>>>>> Thanks,
>>>>>> Pamod
>>>>>>
>>>>>> On Thu, Oct 6, 2016 at 1:42 PM, Asanka Abeyweera <asank...@wso2.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Sidath,
>>>>>>>
>>>>>>> I do not think ping command is a good approach. The reasons are,
>>>>>>>
>>>>>>> 1. PING command uses the ICMP which is different from the AMQP which
>>>>>>> we use for broker communication.
>>>>>>> 2. ICMP can be blocked from the firewall while AMQP is unblocked.
>>>>>>>
>>>>>>> On Thu, Oct 6, 2016 at 1:36 PM, Sidath Weerasinghe <sid...@wso2.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Asanka,
>>>>>>>>
>>>>>>>> Still there is one way to choose the network. That is ping method.
>>>>>>>> Get the one IP and ping to that. Then we can get the all IP address 
>>>>>>>> which
>>>>>>>> are related to that interface. otherwise we want to ping all the IP
>>>>>>>> address.
>>>>>>>>
>>>>>>>> On Thu, Oct 6, 2016 at 1:16 PM, Asanka Abeyweera <asank...@wso2.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Hi Sidath,
>>>>>>>>>
>>>>>>>>> We cannot say that the network is same when the interface name is
>>>>>>>>> same. System admin can configure network interfaces the way they 
>>>>>>>>> prefer.
>>>>>>>>> Therefore we cannot use network interface name to identify if they 
>>>>>>>>> are in
>>>>>>>>> the same network. If we want to identify if two network interfaces in 
>>>>>>>>> the
>>>>>>>>> same network, we have to use a method like checking the subnet using 
>>>>>>>>> the
>>>>>>>>> netmask. Additionally there can be cases where two interfaces belong 
>>>>>>>>> to the
>>>>>>>>> two different subsnets which are connected using a router. In this 
>>>>>>>>> case not
>>>>>>>>> using an interface to connect the broker since it is in a different 
>>>>>>>>> subnet
>>>>>>>>> is wrong.
>>>>>>>>>
>>>>>>>>> On Thu, Oct 6, 2016 at 1:03 PM, Sidath Weerasinghe <
>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Asanka,
>>>>>>>>>>
>>>>>>>>>> I am using this structure because of client wants to get the IP
>>>>>>>>>> address with is related to client network(Client is in LAN or WiFi). 
>>>>>>>>>> So in
>>>>>>>>>> this structure Andes client get the one of IP and choose the suitable
>>>>>>>>>> network to connect. If I group IP addresses based on the nodes then 
>>>>>>>>>> how can
>>>>>>>>>> I get the suitable IP address which is related to the client 
>>>>>>>>>> network. Then
>>>>>>>>>> client want to check all the IP address on the structure.
>>>>>>>>>>
>>>>>>>>>> On Thu, Oct 6, 2016 at 12:03 PM, Asanka Abeyweera <
>>>>>>>>>> asank...@wso2.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi Sidath,
>>>>>>>>>>>
>>>>>>>>>>> If I understood correctly, we are grouping the IP addresses
>>>>>>>>>>> belonging to different nodes according to their interface name. 
>>>>>>>>>>> What was
>>>>>>>>>>> the reason for doing that?
>>>>>>>>>>>
>>>>>>>>>>> With this approach, I do not see a way to identify the IP
>>>>>>>>>>> addresses belonging to a specific node. I think the requirement is 
>>>>>>>>>>> to load
>>>>>>>>>>> balance between different MB nodes available in the cluster. 
>>>>>>>>>>> Therefore I
>>>>>>>>>>> think it is important to group IP addresses based on the nodes 
>>>>>>>>>>> instead of
>>>>>>>>>>> using interface name to group .
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Oct 6, 2016 at 11:42 AM, Sidath Weerasinghe <
>>>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Asanka,
>>>>>>>>>>>>
>>>>>>>>>>>> Each node can be have different intercaces (LAN, WiFi).
>>>>>>>>>>>> So that I got the those IP and ports of all the interfaces.
>>>>>>>>>>>>
>>>>>>>>>>>> <Eth1> - Wifi
>>>>>>>>>>>> <Eth0> - LAN
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *<?xml version="1.0" encoding="UTF-8"?><IpList>    <Eth1>
>>>>>>>>>>>>     <default>            <IP>10.100.4.165:5672
>>>>>>>>>>>> <http://10.100.4.165:5672></IP>            <IP>10.100.4.165:5673
>>>>>>>>>>>> <http://10.100.4.165:5673></IP>        </default>        <ssl>
>>>>>>>>>>>> <IP>10.100.4.165:8672 <http://10.100.4.165:8672></IP>
>>>>>>>>>>>> <IP>10.100.4.165:8673 <http://10.100.4.165:8673></IP>        </ssl>
>>>>>>>>>>>> </Eth1>    <Eth0>        <default>            
>>>>>>>>>>>> <IP>192.165.55.20:5672
>>>>>>>>>>>> <http://192.165.55.20:5672></IP>            <IP>192.165.55.20:5673
>>>>>>>>>>>> <http://192.165.55.20:5673></IP>        </default>        <ssl>
>>>>>>>>>>>> <IP>192.165.55.20:8672 <http://192.165.55.20:8672></IP>
>>>>>>>>>>>> <IP>192.165.55.20:8673 <http://192.165.55.20:8673></IP>        
>>>>>>>>>>>> </ssl>
>>>>>>>>>>>> </Eth0></IpList>*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *<Eth1>        <default> - WiFi binded IP address *
>>>>>>>>>>>>
>>>>>>>>>>>> *           <IP>10.100.4.165:5672
>>>>>>>>>>>> <http://10.100.4.165:5672></IP> - Nodes in cluster
>>>>>>>>>>>> <IP>10.100.4.165:5673 <http://10.100.4.165:5673></IP> - **Nodes
>>>>>>>>>>>> in cluster*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> * <Eth0>        <default> - LAN binded IP address*
>>>>>>>>>>>> *            <IP>192.165.55.20:8672
>>>>>>>>>>>> <http://192.165.55.20:8672></IP> *
>>>>>>>>>>>> *- Nodes in cluster            <IP>192.165.55.20:8673
>>>>>>>>>>>> <http://192.165.55.20:8673></IP> **- Nodes in cluster*
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Oct 6, 2016 at 11:15 AM, Asanka Abeyweera <
>>>>>>>>>>>> asank...@wso2.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Sidath,
>>>>>>>>>>>>>
>>>>>>>>>>>>> From this structure, how can we differentiate between IP
>>>>>>>>>>>>> addresses belonging to different node?
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Oct 6, 2016 at 11:09 AM, Sidath Weerasinghe <
>>>>>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Andes client invokes the admin service to get IP address and
>>>>>>>>>>>>>> ports of the live nodes in the cluster.
>>>>>>>>>>>>>> Admin service makes XML structure  and sends that string to
>>>>>>>>>>>>>> the client who invokes the service.
>>>>>>>>>>>>>> .
>>>>>>>>>>>>>> Here is the structure of the XML,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *<?xml version="1.0" encoding="UTF-8"?><IpList>
>>>>>>>>>>>>>> <Eth1>        <default>            <IP>10.100.4.165:5672
>>>>>>>>>>>>>> <http://10.100.4.165:5672></IP>            <IP>10.100.4.165:5673
>>>>>>>>>>>>>> <http://10.100.4.165:5673></IP>        </default>        <ssl>
>>>>>>>>>>>>>> <IP>10.100.4.165:8672 <http://10.100.4.165:8672></IP>
>>>>>>>>>>>>>> <IP>10.100.4.165:8673 <http://10.100.4.165:8673></IP>        
>>>>>>>>>>>>>> </ssl>
>>>>>>>>>>>>>> </Eth1></IpList>*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The user can choose the SSL by setting a system property in
>>>>>>>>>>>>>> the client program. Otherwise, it always takes default ones.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Any comments ?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Thu, Sep 29, 2016 at 1:39 PM, Sidath Weerasinghe <
>>>>>>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Malaka,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I got the IP address (all network interfaces) and AMQP port
>>>>>>>>>>>>>>> and store database at cluster startup. When node shutdown that 
>>>>>>>>>>>>>>> details are
>>>>>>>>>>>>>>> removed from the database.
>>>>>>>>>>>>>>> I wrote an admin service to get those database details at
>>>>>>>>>>>>>>> the carbon business module. Inside the client, I call that 
>>>>>>>>>>>>>>> service.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Thu, Sep 29, 2016 at 12:08 PM, Malaka Silva <
>>>>>>>>>>>>>>> mal...@wso2.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Thu, Sep 29, 2016 at 10:06 AM, Sidath Weerasinghe <
>>>>>>>>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> In Andes client, I implemented a new initialContextFactory
>>>>>>>>>>>>>>>>> and inside that, I made an AMQP URL.
>>>>>>>>>>>>>>>>> Inside the Andes client, I called that web service to get
>>>>>>>>>>>>>>>>> the cluster node IP address and Port details. When calling 
>>>>>>>>>>>>>>>>> web service it
>>>>>>>>>>>>>>>>> shuffles  the IP address and gives String to the client. 
>>>>>>>>>>>>>>>>> Using this, create
>>>>>>>>>>>>>>>>> AMQP URL inside the Andes client, Other IPs put as a failover.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ​What is the web service you called to get the all the
>>>>>>>>>>>>>>>> members? Can this be a single point of failure?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The client can set failover values as properties.  Inside
>>>>>>>>>>>>>>>>> the new initialContextFactory, read those properties and set 
>>>>>>>>>>>>>>>>> failover.
>>>>>>>>>>>>>>>>> "amqp://admin:admin@carbon/carbon?brokerlist='tcp://
>>>>>>>>>>>>>>>>> 10.100.4.165:5672?*retries='10'&connectdelay='1000'*
>>>>>>>>>>>>>>>>> ;tcp://10.100.4.166:5672?
>>>>>>>>>>>>>>>>> *retries='10'&connectdelay='1000''&failover='roundrobin?cyclecount='20'*
>>>>>>>>>>>>>>>>> '"
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Any ideas for this.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Sep 22, 2016 at 5:11 PM, Sidath Weerasinghe <
>>>>>>>>>>>>>>>>> sid...@wso2.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> In MB, the user/developers having to manually list out
>>>>>>>>>>>>>>>>>> the IPs in the connection URL could be difficult. The change 
>>>>>>>>>>>>>>>>>> of IPs of the
>>>>>>>>>>>>>>>>>> broker nodes would require reconfiguring and restart the 
>>>>>>>>>>>>>>>>>> client
>>>>>>>>>>>>>>>>>> applications connected to it. I am implementing a way to 
>>>>>>>>>>>>>>>>>> dynamically
>>>>>>>>>>>>>>>>>> detection the MB nodes in the cluster and load balance 
>>>>>>>>>>>>>>>>>> through them.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I got the IP address(all network interfaces) and AMQP
>>>>>>>>>>>>>>>>>> port and store database at cluster startup. When node 
>>>>>>>>>>>>>>>>>> shutdown that details
>>>>>>>>>>>>>>>>>> are removed from the database.
>>>>>>>>>>>>>>>>>> I wrote an admin service to get those database details at
>>>>>>>>>>>>>>>>>> the carbon business module.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> In andes client, I implemented a new
>>>>>>>>>>>>>>>>>> initialContextFactory and inside that, I made an AMQP URL. 
>>>>>>>>>>>>>>>>>> As a mock, I got
>>>>>>>>>>>>>>>>>> the IP list from the file and randomly select one of the IP 
>>>>>>>>>>>>>>>>>> and port and
>>>>>>>>>>>>>>>>>> make AMPQ URL. Other IPs  put as a fail-over. I tested it.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *Work to be done*
>>>>>>>>>>>>>>>>>> I will call web service inside the andes client and get
>>>>>>>>>>>>>>>>>> the IP and port and resolve it according to the client 
>>>>>>>>>>>>>>>>>> network. After that
>>>>>>>>>>>>>>>>>> get the correct IP and the port.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> Thank You,
>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *Intern*
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> Thank You,
>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Intern*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/
>>>>>>>>>>>>>>>>> mailman/listinfo/architecture
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Malaka Silva
>>>>>>>>>>>>>>>> Senior Technical Lead
>>>>>>>>>>>>>>>> M: +94 777 219 791
>>>>>>>>>>>>>>>> Tel : 94 11 214 5345
>>>>>>>>>>>>>>>> Fax :94 11 2145300
>>>>>>>>>>>>>>>> Skype : malaka.sampath.silva
>>>>>>>>>>>>>>>> LinkedIn : http://www.linkedin.com/pub/malaka-silva/6/33/77
>>>>>>>>>>>>>>>> Blog : http://mrmalakasilva.blogspot.com/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> WSO2, Inc.
>>>>>>>>>>>>>>>> lean . enterprise . middleware
>>>>>>>>>>>>>>>> https://wso2.com/signature
>>>>>>>>>>>>>>>> http://www.wso2.com/about/team/malaka-silva/
>>>>>>>>>>>>>>>> <http://wso2.com/about/team/malaka-silva/>
>>>>>>>>>>>>>>>> https://store.wso2.com/store/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Don't make Trees rare, we should keep them with care
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Thank You,
>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *Intern*
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Thank You,
>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Intern*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Asanka Abeyweera
>>>>>>>>>>>>> Senior Software Engineer
>>>>>>>>>>>>> WSO2 Inc.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Phone: +94 712228648
>>>>>>>>>>>>> Blog: a5anka.github.io
>>>>>>>>>>>>>
>>>>>>>>>>>>> <https://wso2.com/signature>
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Thank You,
>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>
>>>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *Intern*
>>>>>>>>>>>>
>>>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>>>
>>>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>>>
>>>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>>>
>>>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>>>
>>>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Asanka Abeyweera
>>>>>>>>>>> Senior Software Engineer
>>>>>>>>>>> WSO2 Inc.
>>>>>>>>>>>
>>>>>>>>>>> Phone: +94 712228648
>>>>>>>>>>> Blog: a5anka.github.io
>>>>>>>>>>>
>>>>>>>>>>> <https://wso2.com/signature>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Thank You,
>>>>>>>>>> Best Regards,
>>>>>>>>>>
>>>>>>>>>> Sidath Weerasinghe
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Intern*
>>>>>>>>>>
>>>>>>>>>> *WSO2, Inc. *
>>>>>>>>>>
>>>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>>>
>>>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>>>
>>>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>>>
>>>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Asanka Abeyweera
>>>>>>>>> Senior Software Engineer
>>>>>>>>> WSO2 Inc.
>>>>>>>>>
>>>>>>>>> Phone: +94 712228648
>>>>>>>>> Blog: a5anka.github.io
>>>>>>>>>
>>>>>>>>> <https://wso2.com/signature>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Thank You,
>>>>>>>> Best Regards,
>>>>>>>>
>>>>>>>> Sidath Weerasinghe
>>>>>>>>
>>>>>>>>
>>>>>>>> *Intern*
>>>>>>>>
>>>>>>>> *WSO2, Inc. *
>>>>>>>>
>>>>>>>> *lean . enterprise . middleware *
>>>>>>>>
>>>>>>>>
>>>>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>>>>
>>>>>>>> *Email: *sid...@wso2.com
>>>>>>>>
>>>>>>>> Blog: https://medium.com/@sidath
>>>>>>>>
>>>>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Asanka Abeyweera
>>>>>>> Senior Software Engineer
>>>>>>> WSO2 Inc.
>>>>>>>
>>>>>>> Phone: +94 712228648
>>>>>>> Blog: a5anka.github.io
>>>>>>>
>>>>>>> <https://wso2.com/signature>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Architecture mailing list
>>>>>>> Architecture@wso2.org
>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Pamod Sylvester *
>>>>>>
>>>>>> *WSO2 Inc.; http://wso2.com <http://wso2.com>*
>>>>>> cell: +94 77 7779495
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Thank You,
>>>>> Best Regards,
>>>>>
>>>>> Sidath Weerasinghe
>>>>>
>>>>>
>>>>> *Intern*
>>>>>
>>>>> *WSO2, Inc. *
>>>>>
>>>>> *lean . enterprise . middleware *
>>>>>
>>>>>
>>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>>
>>>>> *Email: *sid...@wso2.com
>>>>>
>>>>> Blog: https://medium.com/@sidath
>>>>>
>>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Thank You,
>>>> Best Regards,
>>>>
>>>> Sidath Weerasinghe
>>>>
>>>>
>>>> *Intern*
>>>>
>>>> *WSO2, Inc. *
>>>>
>>>> *lean . enterprise . middleware *
>>>>
>>>>
>>>> *Mobile: +94719802550 <%2B94719802550>*
>>>>
>>>> *Email: *sid...@wso2.com
>>>>
>>>> Blog: https://medium.com/@sidath
>>>>
>>>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>>>
>>>> _______________________________________________
>>>> Architecture mailing list
>>>> Architecture@wso2.org
>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>
>>>>
>>>
>>>
>>> --
>>> Asanka Abeyweera
>>> Senior Software Engineer
>>> WSO2 Inc.
>>>
>>> Phone: +94 712228648
>>> Blog: a5anka.github.io
>>>
>>> <https://wso2.com/signature>
>>>
>>> _______________________________________________
>>> Architecture mailing list
>>> Architecture@wso2.org
>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>
>>>
>>
>>
>> --
>> Thank You,
>> Best Regards,
>>
>> Sidath Weerasinghe
>>
>>
>> *Intern*
>>
>> *WSO2, Inc. *
>>
>> *lean . enterprise . middleware *
>>
>>
>> *Mobile: +94719802550 <%2B94719802550>*
>>
>> *Email: *sid...@wso2.com
>>
>> Blog: https://medium.com/@sidath
>>
>> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>>
>
>
>
> --
> Thank You,
> Best Regards,
>
> Sidath Weerasinghe
>
>
> *Intern*
>
> *WSO2, Inc. *
>
> *lean . enterprise . middleware *
>
>
> *Mobile: +94719802550 <+94%2071%20980%202550>*
>
> *Email: *sid...@wso2.com
>
> Blog: https://medium.com/@sidath
>
> Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
>



-- 
Thank You,
Best Regards,

Sidath Weerasinghe


*Intern*

*WSO2, Inc. *

*lean . enterprise . middleware *


*Mobile: +94719802550*

*Email: *sid...@wso2.com

Blog: https://medium.com/@sidath

Linkedin: https://lk.linkedin.com/in/sidathweerasinghe
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to