updated spring boot
removed HomeController started to decouple status ingress and feed egress
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.3.1.RELEASE</version>
|
<version>2.4.5</version>
|
||||||
<relativePath />
|
<relativePath />
|
||||||
<!-- lookup parent from repository -->
|
<!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.integration</groupId>
|
<groupId>org.springframework.integration</groupId>
|
||||||
<artifactId>spring-integration-core</artifactId>
|
<artifactId>spring-integration-webflux</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
package io.dietz.ed.companion.controllers;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.Model;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
public class HomeController {
|
|
||||||
|
|
||||||
@GetMapping("/")
|
|
||||||
public String index(final Model model) {
|
|
||||||
return "index";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,8 +11,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import io.dietz.ed.companion.domain.State;
|
import io.dietz.ed.companion.domain.State;
|
||||||
import io.dietz.ed.companion.models.UpdateFeedItem;
|
|
||||||
import io.dietz.ed.companion.models.UpdateStatusResponse;
|
import io.dietz.ed.companion.models.UpdateStatusResponse;
|
||||||
|
import io.dietz.ed.companion.service.StateHandlerService;
|
||||||
import io.dietz.ed.companion.service.UpdateFeedsService;
|
import io.dietz.ed.companion.service.UpdateFeedsService;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
@@ -23,6 +23,9 @@ public class StatusController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UpdateFeedsService updateChannelsService;
|
private UpdateFeedsService updateChannelsService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StateHandlerService stateHandlerService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper objectMapper;
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
@@ -31,17 +34,21 @@ public class StatusController {
|
|||||||
System.out.println(rawPayload);
|
System.out.println(rawPayload);
|
||||||
return Mono.create(sink -> {
|
return Mono.create(sink -> {
|
||||||
if (updateChannelsService.hasActiveFeed(feedId)) {
|
if (updateChannelsService.hasActiveFeed(feedId)) {
|
||||||
UpdateFeedItem updateFeedItem = new UpdateFeedItem(feedId, "credits");
|
State payload = handlePayload(rawPayload);
|
||||||
State payload;
|
if (payload != null) {
|
||||||
try {
|
stateHandlerService.handleState(feedId, payload);
|
||||||
payload = objectMapper.readValue(rawPayload, State.class);
|
|
||||||
updateFeedItem.setContent(Long.valueOf(payload.getCredits()));
|
|
||||||
updateChannelsService.sendFeedUpdate(updateFeedItem);
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sink.success(new UpdateStatusResponse());
|
sink.success(new UpdateStatusResponse());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private State handlePayload(String payload) {
|
||||||
|
try {
|
||||||
|
return objectMapper.readValue(payload, State.class);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package io.dietz.ed.companion.service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.integration.dsl.MessageChannels;
|
||||||
|
import org.springframework.messaging.Message;
|
||||||
|
import org.springframework.messaging.MessageHandler;
|
||||||
|
import org.springframework.messaging.SubscribableChannel;
|
||||||
|
import org.springframework.messaging.support.GenericMessage;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import io.dietz.ed.companion.domain.State;
|
||||||
|
import io.dietz.ed.companion.models.UpdateFeedItem;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class StateHandlerService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UpdateFeedsService updateFeedsService;
|
||||||
|
|
||||||
|
private SubscribableChannel channel = MessageChannels.publishSubscribe().get();
|
||||||
|
|
||||||
|
public StateHandlerService() {
|
||||||
|
MessageHandler stateHandler = message -> {
|
||||||
|
String feedId = message.getHeaders().get("feedId").toString();
|
||||||
|
|
||||||
|
System.out.println("state of '" + feedId + "' received");
|
||||||
|
|
||||||
|
State state = State.class.cast(message.getPayload());
|
||||||
|
|
||||||
|
UpdateFeedItem updateFeedItem = new UpdateFeedItem(feedId, "credits");
|
||||||
|
updateFeedItem.setContent(Long.valueOf(state.getCredits()));
|
||||||
|
updateFeedsService.sendFeedUpdate(updateFeedItem);
|
||||||
|
};
|
||||||
|
|
||||||
|
channel.subscribe(stateHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleState(String feedId, State state) {
|
||||||
|
Message<State> message = new GenericMessage<State>(state, Map.of("feedId", feedId));
|
||||||
|
channel.send(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,6 +47,15 @@ public class UpdateFeedsService {
|
|||||||
return wrap(flux);
|
return wrap(flux);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasActiveFeed(String feedId) {
|
||||||
|
return activeFeeds.containsKey(feedId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendFeedUpdate(UpdateFeedItem updateFeedItem) {
|
||||||
|
Message<UpdateFeedItem> message = new GenericMessage<>(updateFeedItem);
|
||||||
|
channel.send(message);
|
||||||
|
}
|
||||||
|
|
||||||
private <T> Flux<ServerSentEvent<T>> wrap(Flux<T> fluxToWrap) {
|
private <T> Flux<ServerSentEvent<T>> wrap(Flux<T> fluxToWrap) {
|
||||||
return Flux.merge(fluxToWrap.map(t -> ServerSentEvent.builder(t).build()), Flux.interval(Duration.ofSeconds(15)).map(aLong -> ServerSentEvent.<T>builder().comment("keep alive").build()));
|
return Flux.merge(fluxToWrap.map(t -> ServerSentEvent.builder(t).build()), Flux.interval(Duration.ofSeconds(15)).map(aLong -> ServerSentEvent.<T>builder().comment("keep alive").build()));
|
||||||
}
|
}
|
||||||
@@ -65,13 +74,4 @@ public class UpdateFeedsService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasActiveFeed(String feedId) {
|
|
||||||
return activeFeeds.containsKey(feedId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendFeedUpdate(UpdateFeedItem updateFeedItem) {
|
|
||||||
Message<UpdateFeedItem> message = new GenericMessage<>(updateFeedItem);
|
|
||||||
channel.send(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user