Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
Deep dive reactive java (DevoxxPl)
-
Upload
tomasz-kowalczewski -
Category
Software
-
view
166 -
download
1
Transcript of Deep dive reactive java (DevoxxPl)
Reactive, asynchronous• People have been doing it for years
• (Re)invented time and again by big companies and/or in high performance products
–Donald Knuth
“The idea that people knew a thing or two in the 70s is strange to a lot of young programmers”
Reactive, asynchronous• People have been doing it for years
• (Re)invented time and again by big companies and/or in high performance products
• Now every company may need to operate at that scale
• As users demand more and faster we need tools to do it right
Synchronous designList<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
Decomposing individual operations
List<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
Decomposing individual operations
List<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
Decomposing individual operations
List<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
Decomposing individual operations
List<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
What is missing?List<String> tweets = client.getNextTweets(); List<Tweet> validTweets = Lists.newArrayList();
for (String jsonTweet : tweets) { Tweet tweet = gson.fromJson(jsonTweet, Tweet.class);
Image image; image = download(tweet.getUser().getProfileImage()); Tweet.setImage(image); if (tweet.isValidTweet()) {
validTweets.add(tweet); } }
Error
hand
ling
Timeouts
Monitoring
Logging
Back pressure
Parallelism
Credits
• Cat picture taken from http://www.teckler.com/en/Rapunzel