Я использовал Spring WebFlux для создания текстового потока, вот код:
@SpringBootApplication
@RestController
public class ReactiveServer {
private static final String FILE_PATH = "c:/test/";
@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/events")
Flux<String> events() {
Flux<String> eventFlux = Flux.fromStream(Stream.generate(() -> FileReader.readFile()));
Flux<Long> durationFlux = Flux.interval(Duration.ofMillis(500));
return Flux.zip(eventFlux, durationFlux).map(Tuple2::getT1);
}
public static void main(String[] args) {
SpringApplication.run(ReactiveServer.class, args);
}
}
Когда я получаю доступ к URL-адресу / events в браузере, я получаю это, это почти то, чтоЯ хочу получить:
data: {"type": "HystrixCommand", "name": "GetConsumerCommand", "group": "ConsumerRemoteGroup", "currentTime": 1542379993662, "isCircuitBreakerOpen": false, "errorPercentage": 0, "errorCount": 0, "requestCount": 0, "illingCountBadRequests ": 0}
data: {" type ":" HystrixCommand "," name ":" GetConsumerCommand"," group ":" ConsumerRemoteGroup "," currentTime ": 1542379994203," isCircuitBreakerOpen ": false," errorPercentage ": 0," errorCount ": 0," requestCount ": 2, RollingCountBadRequests": 0}
данные: { "Тип": "HystrixCommand", "имя": "GetConsumerCommand", "группа": "ConsumerRemoteGroup", "CURRENTTIME": 1542379994706, "isCircuitBreakerOpen" ложь "errorPercentage": 0, "ERRORCOUNT": 0, "requestCount": 2, "rollCountBadRequests": 0}
data: {"type": "HystrixCommand", "name": "GetConsumerCommand", "group": "ConsumerRemoteGroup "," currentTime ": 1542379995213," isCircuitBreakerOpen ": false," errorPercentage ": 0," errorCount ": 0," requestCount ": 3, RollingCountBadRequests: 0}
Что янеобходимо вставить «ping:» между итерациями, чтобы получить:
ping:
data: {"type": "HystrixCommand", "name": "GetConsumerCommand», "группа": "ConsumerRemoteGroup", "CURRENTTIME": 1542379993662, "isCircuitBreakerOpen" ложь "errorPercentage": 0, "ERRORCOUNT": 0, "requestCount": 0, "rollingCountBadRequests": 0}
данные: { "Тип": "HystrixCommand", "имя": "GetConsumerCommand", "группа": "ConsumerRemoteGroup", "CURRENTTIME": 1542379994203, "isCircuitBreakerOpen" ложь "errorPercentage": 0, "ERRORCOUNT": 0," requestCount ": 2," rollCountBadRequests ": 0}
ping:
data: {" type ":" HystrixCommand "," name ":" GetConsumerCommand ","группа ":" ConsumerRemoteGroup», "CURRENTTIME": 1542379994706, "isCircuitBreakerOpen" ложь "errorPercentage": 0, "ErrorCount": 0, "requestCount": 2, "rollingCountBadRequests": 0}
data: {"type": "HystrixCommand", "name": "GetConsumerCommand", "group": "ConsumerRemoteGroup", "currentTime": 1542379995213, "isCircuitBreakerOpen": false, "errorPercentage": 0,«errorCount»: 0, «requestCount»: 3, RollingCountBadRequests: 0}
Но лучшее, что я мог получить, было:
data: ping:
data: {"type": "HystrixCommand", "name": "GetConsumerCommand", "group": "ConsumerRemoteGroup", "currentTime": 1542379993662, "isCircuitBreakerOpen": false, "errorPercentage": 0,«errorCount»: 0, «requestCount»: 0, RollingCountBadRequests: 0}
data: {«type»: «HystrixCommand», «name»: «GetConsumerCommand», «group»: «ConsumerRemoteGroup», "currentTime": 1542379994203, "isCircuitBreakerOpen": false, "errorPercentage": 0, "errorCount": 0, "requestCount": 2, "illingCountBadRequests ": 0}
данные: пинг:
данные: { "Тип": "HystrixCommand", "имя": "GetConsumerCommand", "группа": "ConsumerRemoteGroup", "CURRENTTIME": 1542379994706, "isCircuitBreakerOpen" ложь "errorPercentage": 0, "errorCount ": 0," requestCount ": 2, RollingCountBadRequests: 0}
data: {" type ":" HystrixCommand "," name ":" GetConsumerCommand "," group ":" ConsumerRemoteGroup ",«currentTime»: 1542379995213, «isCircuitBreakerOpen»: false, «errorPercentage»: 0, «errorCount»: 0, «requestCount»: 3, RollingCountBadRequests »: 0}
Кто-нибудь знает опуть к тому, что мне нужно?