Broadcasting
The JsonRPCBroadcaster service lets you push JSON-RPC notifications from the server to connected WebSocket clients. Inject it into any CDI bean — it does not need to be a @JsonRPCApi class.
Broadcast to All Clients
import io.quarkiverse.jsonrpc.api.JsonRPCApi;
import io.quarkiverse.jsonrpc.api.JsonRPCBroadcaster;
import jakarta.inject.Inject;
@JsonRPCApi
public class NotificationService {
@Inject
JsonRPCBroadcaster broadcaster;
public String publishUpdate(String message) {
broadcaster.broadcast("update", Map.of("message", message));
return "sent";
}
}
All connected clients receive a JSON-RPC notification:
{
"jsonrpc": "2.0",
"method": "update",
"params": {
"result": {
"message": "Something happened"
}
}
}
Send to a Specific Session
Target a single client by session ID:
@JsonRPCApi
public class NotificationService {
@Inject
JsonRPCBroadcaster broadcaster;
public boolean notifyUser(String sessionId, String message) {
return broadcaster.send(sessionId, "alert", Map.of("message", message));
}
}
Returns true if the session was found and the message was sent, false otherwise.
List Connected Sessions
You can query the set of currently connected session IDs:
@JsonRPCApi
public class SessionService {
@Inject
JsonRPCBroadcaster broadcaster;
public Set<String> activeSessions() {
return broadcaster.connectedSessions();
}
}
Use Outside @JsonRPCApi
JsonRPCBroadcaster is a regular CDI bean. You can inject it anywhere — a REST endpoint, a scheduled job, an event observer:
@ApplicationScoped
public class EventProcessor {
@Inject
JsonRPCBroadcaster broadcaster;
public void onOrderPlaced(@Observes OrderPlacedEvent event) {
broadcaster.broadcast("orderPlaced", event);
}
}