Как предоставить данные в SSE из запроса @Tailable в Spring Data Mongo - PullRequest
0 голосов
/ 12 июля 2020

После прочтения документации @Tailable Spring Data MongoDB, я думаю, что его можно использовать для уведомлений о сообщениях.


@SpringBootApplication
class ServerApplication {

    @Bean
    fun runner(template: ReactiveMongoTemplate) = CommandLineRunner {
        println("running CommandLineRunner...")
        template.executeCommand("{\"convertToCapped\": \"messages\", size: 100000}");
    }

    fun main(args: Array<String>) {
        runApplication<ServerApplication>(*args)
    }

}

---------


@RestController()
@RequestMapping(value = ["messages"])
@CrossOrigin(origins = ["http://localhost:4200"])
class MessageController(private val messages: MessageRepository) {

    @PostMapping
    fun hello(p: String) =
            this.messages.save(Message(body = p, sentAt = Instant.now())).log().then()

    @GetMapping(produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
    fun messageStream(): Flux<Message> = this.messages.getMessagesBy().log()
}


-----------



interface MessageRepository : ReactiveMongoRepository<Message, String> {
    @Tailable
    fun getMessagesBy(): Flux<Message>
}


------------


@Document(collection = "messages")
data class Message(@Id var id: String? = null, var body: String, var sentAt: Instant = Instant.now())

Как это реализовать?

Сделал сам, проверьте свое решение .

...