Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current Restore this Version View Page History

« Previous Version 7 Current »

Fabric3 supports low-latency, high performance communications between clients and services and producers and consumers (Pub/Sub) via a binding built on the ZeroMQ Library. The following messaging patterns are supported:

  • Non-blocking (asynchronous) queue-based messaging
  • Non-blocking  (asynchronous) queue-based messaging with callbacks
  • Request-reply messaging

It is generally recommended to use non-blocking message patterns for better performance.

Configuring a Service and Reference Binding

Wiring a reference to a service using the ZeroMQ is done as follows in Java:

public class Client ...{
 
	@ZeroMQ(target="ZMQService")
	protected Service service;
 
	public void invoke(){
		service.invoke("message");
	}
}

@ZeroMQ(service="ZMQService")
public class ServiceImpl implements Service {

	public void invoke(String message){
		//....
	}
}

Or in XML as follows:

<component name="Client">
   <implementation.java class="org.fabric3.binding.zeromq.client.Client"/>
   <reference name="service">
       <f3:binding.zeromq target="ZMQService"/>
   </reference>
</component>

 
<component name="ZMQService">
   <implementation.java class="org.fabric3.binding.zeromq.service.ServiceImpl"/>
   <service name="ZMQService">
      <f3:binding.zeromq/>
   </service>
</component>

In the above example, if Service uses non-blocking operations (i.e. uses operations annotated with @OneWay), a ZeroMQ PUSH/PULL socket will be established between the reference and service. If the operations are blocking, XREQ/XREP will be used instead.

Cluster Operation

Note that the binding configuration in the previous figure did not specify an IP address and port combination to connect/bind to. If one is not specified, Fabric3 will allocate a port from the block reserved for each runtime. Addressing information will then be propagated by Fabric3 to required runtimes in the domain. For example, if Client is hosted on a different machine than Service, Fabric3 will transparently propagate the latter's address so that Client can connect to the service.


Further, if TestService is deployed to a clustered zone, all endpoint addresses will be propagated to Client, which in turn will round-robin requests to cluster instances.

Port Allocation

The ZeroMQ binding attempts to acquire ports for sockets from the block configured for a particular runtime or zone. For information on how to configure a port block, see Port Allocation.