All Projects → aesteve → Vertx Feeds

aesteve / Vertx Feeds

Licence: apache-2.0
Feed aggregator using Vert.x 3 (showcase)

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Vertx Feeds

Pythonstudy
Python related technologies used in work: crawler, data analysis, timing tasks, RPC, page parsing, decorator, built-in functions, Python objects, multi-threading, multi-process, asynchronous, redis, mongodb, mysql, openstack, etc.
Stars: ✭ 103 (-18.9%)
Mutual labels:  redis, mongodb
Vertx Kue
Vert.x Blueprint Project - Vert.x Kue, a priority task queue powered by Vert.x
Stars: ✭ 126 (-0.79%)
Mutual labels:  redis, vertx
Spring Boot 2.x Examples
Spring Boot 2.x code examples
Stars: ✭ 104 (-18.11%)
Mutual labels:  redis, mongodb
Vue Family Bucket Ssr Koa2 Full Stack Development From Meituan
🚀🚀2020最新Vue全家桶+SSR+Koa2全栈开发☁
Stars: ✭ 100 (-21.26%)
Mutual labels:  redis, mongodb
User.api
集成网关、身份认证、Token授权、微服务、.netcore等的基于CQRS的微服务开发框架示例
Stars: ✭ 109 (-14.17%)
Mutual labels:  redis, mongodb
Springboot Templates
springboot和dubbo、netty的集成,redis mongodb的nosql模板, kafka rocketmq rabbit的MQ模板, solr solrcloud elasticsearch查询引擎
Stars: ✭ 100 (-21.26%)
Mutual labels:  redis, mongodb
Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+43047.24%)
Mutual labels:  redis, mongodb
Bankflix
Aplicação que simula um banco digital, contendo a área do cliente e administrativa, permitindo depósitos e transferências entre contas do mesmo banco. | Application that simulates a digital bank, containing the customer and administrative areas, allowing deposits and transfers between accounts of the same bank.
Stars: ✭ 82 (-35.43%)
Mutual labels:  redis, mongodb
Nest Cnode
CNode 社区 Nest 版本 https://cnodejs.org/
Stars: ✭ 125 (-1.57%)
Mutual labels:  redis, mongodb
Blog
我的日记
Stars: ✭ 110 (-13.39%)
Mutual labels:  redis, mongodb
Go Sniffer
🔎Sniffing and parsing mysql,redis,http,mongodb etc protocol. 抓包截取项目中的数据库请求并解析成相应的语句。
Stars: ✭ 1,281 (+908.66%)
Mutual labels:  redis, mongodb
Mdserver Mac
mdserver (mac version, secondary development)
Stars: ✭ 121 (-4.72%)
Mutual labels:  redis, mongodb
Spring 5 Examples
This repository is contains spring-boot 2 / spring framework 5 project examples. Using reactive programming model / paradigm and Kotlin
Stars: ✭ 87 (-31.5%)
Mutual labels:  redis, mongodb
Production Ready Expressjs Server
Express.js server that implements production-ready error handling and logging following latest best practices.
Stars: ✭ 101 (-20.47%)
Mutual labels:  redis, mongodb
Dataengineeringproject
Example end to end data engineering project.
Stars: ✭ 82 (-35.43%)
Mutual labels:  redis, mongodb
Ymate Platform V2
YMP是一个非常简单、易用的轻量级Java应用开发框架,涵盖AOP、IoC、WebMVC、ORM、Validation、Plugin、Serv、Cache等特性,让开发工作像搭积木一样轻松!
Stars: ✭ 106 (-16.54%)
Mutual labels:  redis, mongodb
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+7959.84%)
Mutual labels:  redis, mongodb
Shw server
使用SpringCloud和Spring WebFlux开发的学生作业管理系统服务端,前后端分离项目,微服务架构。支持Docker集群化部署,Redis集群化缓存,文件在线预览 压缩包预览 打包上传下载
Stars: ✭ 66 (-48.03%)
Mutual labels:  redis, mongodb
Daudit
🌲 Configuration flaws detector for Hadoop, MongoDB, MySQL, and more!
Stars: ✭ 108 (-14.96%)
Mutual labels:  redis, mongodb
Dtcqueuebundle
Symfony2/3/4/5 Queue Bundle (for background jobs) supporting Mongo (Doctrine ODM), Mysql (and any Doctrine ORM), RabbitMQ, Beanstalkd, Redis, and ... {write your own}
Stars: ✭ 115 (-9.45%)
Mutual labels:  redis, mongodb

Feed aggregator using Vert.x 3 and Vertx-web.

StackShare Travis

This project is designed to show what a real-life application can look like with Vert.x.

It's a simple feed agregator.

Every user can subscribe to some feeds (RSS, ...), then Vert.x will periodically read these feeds and store news (and notify connected clients).

Users and their subscriptions user are store in MongoDB. Feed entries (RSS news article for example) are stored in Redis.

How it works :

Simple use-case :

  • Users register using a simple login / password. An User is a simple document in MongoDB database. (there's no need for an email address in this demo)
  • Once they're registered, they can subscribe to feeds by providing the feed's URL (and a color, for UI display). A Feed is another document in MongoDB.
  • Subscriptions are stored in user infos (user.subscriptions) but also in a plain mongo collection listing feeds and the number of people who subscribed to this feed.
  • Periodically, a verticle lists the entries in the feeds collection and for each of the feeds that have a subscriber count > 0, will read the RSS feed and fetch new entries
  • New feed entries are store into JSON objects in a Redis set. The key is the feed's URL hash, the value is the JSON equivalent of the RSS entry and the score is the timestamp of the entry's publication date
  • When a user asks for his news feed entries, they are aggregated from Redis for each of his subscriptions
  • When the new feed entries are stored into Redis, they're also pushed as a List of entries on Vertx's event bus. This allows end users who are connected from client side to receive real-time updates by subscribing directly to event bus notifications.

Feed API :

  • GET /api/feeds : lists user's subscriptions
  • POST /api/feeds : subscribe to a new feed
  • GET /api/feeds/:feedId : fetches information for a specific feed
  • PUT /api/feeds/:feedId : update infos for a specific feed (color especially)
  • DELETE /api/feeds/:feedId : unsubscribe to a feed
  • GET /api/feeds/:feedId/entries : fetches the feed entries

Schema :

                 +--------------------------+                                                   
                 |                          |                                                   
                 |  Verticle (= broker)     |                                                   
                 |                          |                                                   
                 |                          |                                                   
                 |                          |                                                   
                 |fetch items / subscription|                                                   
                 | +-------------------+    |                                                   
                 | |                   |    |                                                   
                 +--------------------------+                                                   
list subscriptions |                   | populate items in Redis                                
 +-----------------+----------+ +------+--------------------+                                   
 |                            | |                           |                                   
 |          MongoDB           | |           Redis           |                                   
 |                            | |                           |                                   
 |                            | |                           |                                   
 | Stores :                   | | Stores :                  |                                   
 | - Users                    | | - Items per feed          |                                   
 | - Their subscriptions      | |                           |                                   
 | - A collection of feeds    | |                           |                                   
 |                            | |                           |                                   
 +-----------------^----------+ +----^----------------------+                                   
 login / create user / subscribe     | poll periodically for each connected user -> push updates
                +---------------------------------+                                             
                |  Web verticle (API + Sockets)   |                                             
                |                                 |                                             
                | - serves pages                  |                                             
                | | login users                   |                                             
                | | serves items through API      |                                             
                | - real-time updates (sockjs)    |                                             
                |                                 |                                             
                |                                 |                                             
                |                                 |                                             
                +---------------------------------+                                             

What it illustrates

The goal of this project is to be informative for every user who wants to see what Vert.x is able to do.

You'll find :

  • how to build dynamic server-side rendered pages thanks to Handlebars and it's implementation in Vert.x (HandlebarsTemplateEngine)
  • how to build a JSON REST API using vertx-web's Router
  • how to read data from a JSON REST API using AngularJS on client-side
  • how to read / write from / to MongoDB in an asynchronous way thanks to vertx-mongo-client
  • how to use vertx-redis-client to store items in a redis set asynchronously
  • a very simple implementation of the publish / subscribe pattern on Vert.x's event bus, one of its key features.
  • how to expose Vert.x's event bus messages on client-side thanks to Vert.x EventBusBridge using sockjs
  • examples of code involving Java 8 lambdas to deal with an asynchronous API
  • some (hopefully) useful classes to deal with asynchronous stuff, like the MultipleFutures class
  • how to package a whole Vert.x application (fatJar) using Gradle, see build.gradle

For now, the project is here for you to read its code, not at all for production use.

If you want to run it on your local machine, from the root of the project, type in ./gradlew run from the command-line. If you want to run it from your IDE, you have to create a "Run configuration" involving io.vertx.core.Starter as main-class with the following arguments : run io.vertx.examples.feeds.verticles.MainVerticle. This way you can easily debug the source code.

Then you can point your browser at : http://localhost:9000/index.hbs and you should see the home page.

Redis and Mongo are embedded in the application so that you don't need to install them locally.

Contributing

The project is completely free. You can fork the project, use it for your own purpose if you want to.

Feel free to open issues, or ask questions on Vert.x Google Group if you have any.

Feel free to highlight source code that you don't understand or would have written in a different way, I'd be happy to discuss and even more happy if you're right and point me at a more elegant way to write the application's source code.

Obviously, you can submit a Pull Request if you're pretty sure something would be better if written differently, or that a key feature of Vert.x is missing and you'd like it to be illustrated in this example (but keep in mind this project should be kept simple, it's already a bit complicated to dive in).

Thanks anyway for any kind of contribution you could submit, it's greatly appreciated. :)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].