Hazelcast provides REST interface, i.e. it provides an HTTP service in each node so that your map
and queue
can be accessed using HTTP protocol. Assuming mapName
and queueName
are already configured in your Hazelcast, its structure is shown below:
http://node IP address:port/hazelcast/rest/maps/mapName/key
http://node IP address:port/hazelcast/rest/queues/queueName
For the operations to be performed, standard REST conventions for HTTP calls are used.
Assume that your cluster members are as shown below.
Members [5] {
Member [10.20.17.1:5701]
Member [10.20.17.2:5701]
Member [10.20.17.4:5701]
Member [10.20.17.3:5701]
Member [10.20.17.5:5701]
}
Creating/Updating Entries in a Map
You can put a new key1/value1
entry into a map by using POST call to http://10.20.17.1:5701/hazelcast/rest/maps/mapName/key1
URL. This call's content body should contain the value of the key. Also, if the call contains the MIME type, Hazelcast stores this information, too. A sample POST call is shown below.
$ curl -v -X POST -H "Content-Type: text/plain" -d "bar" \http://10.20.17.1:5701/hazelcast/rest/maps/mapName/foo
Retrieving Entries from a Map
If you want to retrieve an entry, you can use GET call to http://10.20.17.1:5701/hazelcast/rest/maps/mapName/key1
. You can also retrieve this entry from another member of your cluster such as http://10.20.17.3:5701/hazelcast/rest/maps/mapName/key1
. A sample GET call is shown below with its returns.
$ curl -X GET \http://10.20.17.3:5701/hazelcast/rest/maps/mapName/foo
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Content-Length: 3
bar
As you can see, GET call returned value, its length and also the MIME type (text/plain
) since POST call sample shown above included the MIME type.
Removing Entries from a Map
You can use DELETE call to remove an entry. A sample DELETE call is shown below with its returns.
$ curl -v -X DELETE \http://10.20.17.1:5701/hazelcast/rest/maps/mapName/foo
< HTTP/1.1 204 No Content
< Content-Length: 0
Offering Items on a Queue
You can use POST call to create an item on the queue. A sample is shown below.
$ curl -v -X POST -H "Content-Type: text/plain" -d "foo" \http://10.20.17.1:5701/hazelcast/rest/queues/myEvents
Above call is equivalent to Hazelcast.getQueue("myEvents").offer("foo");
.
Retrieving Items from a Queue
DELETE call can be used for retrieving. Note that, poll timeout should be stated while polling for queue events by an extra path parameter. A sample is shown below (10 being the timeout value).
$ curl -v -X DELETE \http://10.20.17.1:5701/hazelcast/rest/queues/myEvents/10
Above call is equivalent to Hazelcast.getQueue("myEvents").poll(10, SECONDS);
. Below is the returns of above call.
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Content-Length: 3
foo
When the timeout is reached, the return will be No Content
success, i.e. there is no item on the queue to be returned.
Besides the above operations, you can check the status of your cluster, a sample of which is shown below.
$ curl -v http://127.0.0.1:5701/hazelcast/rest/cluster
The return will be similar to the following.
< HTTP/1.1 200 OK
< Content-Length: 119
Members [5] {
Member [10.20.17.1:5701] this
Member [10.20.17.2:5701]
Member [10.20.17.4:5701]
Member [10.20.17.3:5701]
Member [10.20.17.5:5701]
}
ConnectionCount: 5
AllConnectionCount: 20
RESTful access is provided through any member of your cluster. So you can even put an HTTP load-balancer in front of your cluster members for load balancing and fault tolerance.
Note: You need to handle the failures on REST polls as there is no transactional guarantee.