package com.mirzaakhena.websocketdemo; import java.util.concurrent.TimeUnit; import javax.annotation.PostConstruct; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.sse.InboundSseEvent; import javax.ws.rs.sse.SseEventSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; @SpringBootApplication public class WebsocketdemoApplication { Logger logger = LoggerFactory.getLogger(WebsocketdemoApplication.class); @Autowired private Environment env; public static void main(String[] args) { SpringApplication.run(WebsocketdemoApplication.class, args); } private final String PROP_HANDSHAKING_URL = "app.handshaking_url"; private final String PROP_HANDSHAKING_RETRY_IN_SECOND = "app.handshaking_retry_in_second"; private WebTarget tut; private SseEventSource sse; @PostConstruct private void initAplikasi() { Client client = ClientBuilder.newClient(); this.tut = client.target(env.getProperty(PROP_HANDSHAKING_URL)); doHandshaking(); } private void doHandshaking() { logger.info(String.format("Handshaking...")); sse = SseEventSource.target(this.tut).build();// sse.register(this::onMessage, this::onError, this::rehandshaking); sse.open(); } private void rehandshaking() { logger.info(String.format("Connection Closed!")); try { int retry = Integer.parseInt(env.getProperty(PROP_HANDSHAKING_RETRY_IN_SECOND)); Thread.sleep(retry * 1000L); } catch (InterruptedException e) { } doHandshaking(); } private void onError(Throwable t) { logger.error("Error : %s", t.getMessage()); } private void onMessage(InboundSseEvent event) { logger.info(String.format("Message : %s", event.readData())); } } // application.properties // ----------------------- // server.port = 8080 // app.handshaking_url = http://localhost:3000/handshake/0208 // app.handshaking_retry_in_second = 5 // pom.xml dependency // // // org.springframework.boot // spring-boot-starter-web // // // org.glassfish.jersey.media // jersey-media-sse // 2.26 // // // org.glassfish.jersey.inject // jersey-hk2 // 2.26 // //