Event Driven Remoting Example
Author | XAP Version | Last Updated | Reference | Download |
---|---|---|---|---|
Shay Hassidim | 8.0.4 | September 2014 |
Overview
OpenSpaces provides the ability to perform service method invocations on remote services, using the space as the transport layer. You may use the Event Driven Remoting and Executor Based Remoting.
The benefits of using the Event Driven Remoting Compared to the Executor Based Remoting:
- Service and Data can be located in different locations.
- Service can be shut down without impacting the Data.
The downside using Event Driven Remoting is performance and scalability. Since it is using polling container that is asynchronous consumer where the trigger to the invocation is a space write operation the internal overhead compared to the Executor Based Remoting is higher.
Event Driven Remoting Example
The Event Driven Remoting allows you to:
- Immediately returns a ‘Future’
- Allows the client to determine when to get the results
- Calling Future.get() is a synchronous call
- Is designed for long-running computation requests
Installing and Running the example
- Download the example package and unzip it under your
\examples folder. - Load the example into your IDE (eclipse or your favorite Java development environment).
- Edit the project to include the correct GigaSpaces libraries location.
Setup the Service PU run configuration:
Setup the Client PU run configuration:
Run the Service PU
Run the Client PU. This will invoke the service to that will immediately return and after 10 seconds will receive the result.
The Flow
To allow the client to invoke the service and immediately return the actual dialog between the client and the service done via request/response space objects. The service business logic is executed in the background, and when completed returns the result back to the client:
- Client is writing a Request object to the space.
- The Request object is taken by the service (using a polling container).
- The Service is writing back a Response object.
- The client takes the Response object.
Sample Client Output
EventRemotingClient: I am being constructed.
2011-11-08 09:11:46,871 INFO [org.openspaces.pu.container.integrated.IntegratedProcessingUnitContainer] -
Processing unit(s) started successfully
---------------------------------------------------
2011-11-08 09:11:47.867 About to invoke Service - Request #1
2011-11-08 09:11:47.97 Got EventDrivenRemoteFuture back...
2011-11-08 09:11:47.97 Future.get() returns Hi
---------------------------------------------------
2011-11-08 09:11:57.983 About to invoke Service - Request #2
2011-11-08 09:11:57.985 Got EventDrivenRemoteFuture back...
2011-11-08 09:11:57.985 Future.get() returns Hi
---------------------------------------------------
Sample Service Output
SimpleServiceImpl constructed...
2011-11-08 09:11:40,036 INFO [org.openspaces.pu.container.integrated.IntegratedProcessingUnitContainer] -
Processing unit(s) started successfully
2011-11-08 09:11:47.965 SimpleServiceImpl - Request Number:1 called!
2011-11-08 09:11:57.985 SimpleServiceImpl - Request Number:2 called!