This example demonstrates JAX-RS 2.0 server-sent events support sometimes also called one-way publish-subscribe model.
The full description how to create a support for server-sent events can be found in Jersey User Guide, chapter Server-Sent Events (SSE) Support.
It is highly recommended to look at details of SSE API Specification on http://www.w3.org/TR/2009/WD-eventsource-20091029/
The mapping of the URI path space is presented in the following table:
URI path | Resource class | HTTP methods | Description |
---|---|---|---|
server-sent-events | ServerSentEventsResource | GET | Get entire EventOutput with all messages |
server-sent-events | ServerSentEventsResource | POST | Insert a new message in EventOutput |
server-sent-events | ServerSentEventsResource | DELETE | Reset EventOutput |
server-sent-events/domains/{id} | BlockingPostChatResource | POST | Generate several messages with a delay in EventOutput and return it |
A great example of Server-Sent Events is server-sent-events/domains/{id}
which sends several messages with a delay 200ms between each other.
curl -v -X POST http://localhost:8080/server-sent-events-jersey/domains/1 -H "Content-Type: text/event-stream"
Look at a console how events are handled one after another in the right order.
event: domain-progress data: starting domain 1 ... event: domain-progress data: 50% event: domain-progress data: 60% event: domain-progress data: 70% event: domain-progress data: 99% event: domain-progress data: done
Look at Jersey Documentation to learn how to consume Server-Sent Events using Jersey Client https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/sse.html#sse-client-jaxrs
Run the example as follows:
mvn clean compile exec:java
This deploys the example using Grizzly container.