Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Criando um endpoint de streaming
Search
Felipe Mamud
October 19, 2017
Programming
1
40
Criando um endpoint de streaming
Como criar um endpoint stream utilizando Spring Boot.
Felipe Mamud
October 19, 2017
Tweet
Share
More Decks by Felipe Mamud
See All by Felipe Mamud
Criando sua DSL com jparsec
ftmamud
0
51
Groovy como você nunca viu
ftmamud
0
2.2k
Erlang sem enrolação!
ftmamud
0
96
Gradle: o melhor amigo no build do seu software
ftmamud
0
110
Desenvolvendo software no mundo atual
ftmamud
0
55
Reactive Programming no mundo Java
ftmamud
0
180
Reactive Programming - Brincando com eficiência, composição e assíncronia
ftmamud
1
390
Concorrência em Java: do velho oeste a atualidade
ftmamud
0
77
Java Threads: O que há de errado com elas e como resolver?
ftmamud
0
65
Other Decks in Programming
See All in Programming
導入から5年が経って見えた Datadog APM 運用の課題
bgpat
2
540
DocC Tutorial と TCA におけるテスト機能の紹介
kalupas226
1
330
Laravel OpenAPIによる"辛くない"スキーマ駆動開発
kentaroutakeda
2
2.1k
WebComponentsで フレームワークを1ページに共存させる
webuilder240
0
150
オブジェクトしこう
okuramasafumi
2
130
[スクリプト] Swiftの型推論を学ぼう
omochi
0
120
Cloud RunとCloud PubSubでサーバレスなデータ基盤2024 with Terraform / Cloud Run and PubSub with Terraform
shinyorke
7
1.9k
Compiling Python to WebAssembly with py2wasm
syrusakbary
0
140
オブジェクト指向のリ・オリエンテーション~歴史を振り返り、AI時代に向きなおる~
hanyudaeiiti
2
220
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
120
htmx is fun!
codehex
2
190
TDDと今まで
kanayannet
0
140
Featured
See All Featured
Docker and Python
trallard
33
2.6k
Large-scale JavaScript Application Architecture
addyosmani
501
110k
Build your cross-platform service in a week with App Engine
jlugia
223
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
Being A Developer After 40
akosma
56
580k
Designing for Performance
lara
601
67k
Product Roadmaps are Hard
iamctodd
43
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
35
2.4k
The Brand Is Dead. Long Live the Brand.
mthomps
48
22k
Mobile First: as difficult as doing things right
swwweet
215
8.5k
Web development in the modern age
philhawksworth
201
10k
The Pragmatic Product Professional
lauravandoore
24
5.7k
Transcript
Criando um endpoint de streaming DANIEL MEZZATTO @mezzatto FELIPE MAMUD
@mamud
Então vc quer criar um endpoint stream?
AGENDA Stream.of("Motivação", "Desafios", "Endpoint") .map(VivaReal::techTalk) .collect(Collectors.knowledge());
MOTIVAÇÃO • Time to first byte (TTFB) • Deep paging
DESAFIOS • Qual implementação utilizar? ◦ Java? outra linguagem? ◦
Server-Sent Events ◦ StreamingResponseBody* ◦ Custom • ES SearchScroll (com shards) • Sized stream
CONTROLLER @RequestMapping(value = "/{index}/stream", method = GET) public StreamingResponseBody stream(
FilterableApiRequest request, HttpServletResponse httpServletResponse) { httpServletResponse .setContentType("application/x-ndjson;charset=UTF-8"); return out -> searchService.stream(request, out); }
@Component public class ElasticSearchStream { public void stream(OutputStream stream) {
ResponseStream.iterate(stream, new SearchApiIterator<>(esClient, requestBuilder(), scroll -> scroll.setScroll(keepAlive) .actionGet(streamTimeout), count), searchHit -> toBytes(searchHit.getSourceRef())); } } ELASTICSEARCH STREAM
RESPONSE STREAM public static <T> void iterate(OutputStream stream, Iterator<T[]> iterator,
Function<T, byte[]> byteFn) { while (iterator.hasNext()) { for (T hit: iterator.next()) { stream.write(byteFn.apply(hit)); stream.write('\n'); } stream.flush(); } }
SEARCH ITERATOR public class SearchApiIterator<T> implements Iterator<T[]> { @Override public
boolean hasNext() { return hits() > 0 && count <= size; } @Override public T[] next() { T[] result = (T[]) response.getHits().getHits(); response = loop.apply(client.prepareSearchScroll(response.getScrollId())); this.count += hits(); return result; } }|
None