Author: andygumbrecht
Date: Mon Jul  2 15:13:50 2012
New Revision: 1356291

URL: http://svn.apache.org/viewvc?rev=1356291&view=rev
Log:
MultiPulse docs.

Added:
    openejb/site/trunk/content/multipulse-discovery.mdtext

Added: openejb/site/trunk/content/multipulse-discovery.mdtext
URL: 
http://svn.apache.org/viewvc/openejb/site/trunk/content/multipulse-discovery.mdtext?rev=1356291&view=auto
==============================================================================
--- openejb/site/trunk/content/multipulse-discovery.mdtext (added)
+++ openejb/site/trunk/content/multipulse-discovery.mdtext Mon Jul  2 15:13:50 
2012
@@ -0,0 +1,85 @@
+Title: MultiPulse (UDP) Discovery
+
+MultiPulse is an alternative multicast lookup that does not use a regular 
heartbeat.
+Instead, servers listen for a multicast request packet (a pulse) to which a 
response
+is sent. Multicast network traffic is effectively reduced to an absolute 
minimum.
+
+# Server Configuration
+
+When you boot the server there should be a `conf/conf.d/multipulse.properties` 
file
+containing:
+
+    server         = org.apache.openejb.server.discovery.MulticastPulseAgent
+    bind           = 239.255.2.3
+    port           = 6142
+    disabled    = true
+    group          = default
+
+You just need to enable the agent by setting `disabled = false`. It is 
advisable to
+disable multicast in the multicast.properties file, or at least to use a 
different
+bind address or port should you wish to use both. 
+
+All of the above settings except `server` can be modified as required.
+The `port` and `bind` must be valid for general multicast/udp network 
communication.
+
+The `group` setting can be changed to further group servers that may use
+the same multicast channel.  As shown below the client also has a `group`
+setting which can be used to select an appropriate server from the
+multicast channel.
+
+The next step is to ensure that the advertised services are configured for 
discovery.
+Edit the `ejbd.properties` file (and any other enabled services such as http, 
etc.) and 
+ensure that the `discovery` option is set to a value that remote clients will 
be able
+to resolve.
+
+       server      = org.apache.openejb.server.ejbd.EjbServer
+       bind        = 0.0.0.0
+       port        = 4201
+       disabled    = false
+       threads     = 20
+       discovery   = ejb:ejbd://{bind}:{port}
+       
+NOTE: If either `0.0.0.0` (IPv4) or `[::]` (IPv6) wildcard addresses are used 
then the server
+will actually broadcast all of it's known public hosts to clients. Clients 
will then cycle
+though and attempt to connect to the provided hosts until successful. If 
`localhost` is used
+then only clients on the same machine will actually 'see' the server.
+
+# MultiPulse Client
+
+The multipulse functionality is not just for servers to find each other in a
+cluster, it can also be used for EJB clients to discover a server.  A
+special `multipulse://` URL can be used in the `InitialContext` properties to
+signify that multipulse should be used to seed the connection process.  Such
+as:
+
+    Properties p = new Properties();
+    p.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.apache.openejb.client.RemoteInitialContextFactory");
+    p.put(Context.PROVIDER_URL, 
"multipulse://239.255.2.3:6142?group=default&timeout=250");
+    InitialContext remoteContext = new InitialContext(p);
+
+The URL has optional query parameters such as `schemes` and `group` and
+`timeout` which allow you to zero in on a particular type of service of a
+particular cluster group as well as set how long you are willing to wait in
+the discovery process till finally giving up.  The first matching service
+that it sees "flowing" around on the UDP stream is the one it picks and
+sticks to for that and subsequent requests, ensuring UDP is only used when
+there are no other servers to talk to.
+    
+Note that EJB clients do not need to use multipulse to find a server.  If
+the client knows the URL of a server in the cluster, it may use it and
+connect directly to that server, at which point that server will share the
+full list of its peers.
+    
+# Multicast Servers with TCP Clients
+    
+Note that clients do not need to use multipulse to communicate with servers.
+Servers can use multicast to discover each other, but clients are still
+free to connect to servers in the network using the server's TCP address.
+    
+    Properties p = new Properties();
+    p.put(Context.INITIAL_CONTEXT_FACTORY,  
"org.apache.openejb.client.RemoteInitialContextFactory");
+    p.put(Context.PROVIDER_URL, "ejbd://192.168.1.30:4201");
+    InitialContext remoteContext = new InitialContext(p);
+
+When the client connects, the server will send the URLs of all the servers
+in the group and failover will take place normally.


Reply via email to