{"id":15056695,"url":"https://github.com/mertbesirli/ticket-app","last_synced_at":"2026-01-02T10:04:39.467Z","repository":{"id":222177803,"uuid":"756242606","full_name":"mertbesirli/ticket-app","owner":"mertbesirli","description":"Spring Boot - Spring Cloud - Maven - Microservice - MySQL - Cassandra - Elasticsearch","archived":false,"fork":false,"pushed_at":"2024-02-12T10:59:33.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-21T02:25:40.445Z","etag":null,"topics":["cassandra","circuit-breaker","config-server","docker","docker-compose","elasticsearch","java","maven","mysql","netflix-eureka","open-feign","rabbitmq","resillience4j","rest-api","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mertbesirli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-12T09:17:04.000Z","updated_at":"2024-02-12T17:46:48.000Z","dependencies_parsed_at":"2024-02-12T20:02:09.673Z","dependency_job_id":null,"html_url":"https://github.com/mertbesirli/ticket-app","commit_stats":null,"previous_names":["mertbesirli/ticket-app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mertbesirli%2Fticket-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mertbesirli%2Fticket-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mertbesirli%2Fticket-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mertbesirli%2Fticket-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mertbesirli","download_url":"https://codeload.github.com/mertbesirli/ticket-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243544665,"owners_count":20308168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cassandra","circuit-breaker","config-server","docker","docker-compose","elasticsearch","java","maven","mysql","netflix-eureka","open-feign","rabbitmq","resillience4j","rest-api","spring-boot"],"created_at":"2024-09-24T21:55:15.471Z","updated_at":"2026-01-02T10:04:34.448Z","avatar_url":"https://github.com/mertbesirli.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ticket App\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![MIT License][license-shield]][license-url]\n[![Java Platform](https://img.shields.io/badge/platform-Java-blue.svg)](https://docs.oracle.com/en/java/)\n[![REST Architecture](https://img.shields.io/badge/architecture-REST-5DADE2.svg)](http://www.vogella.com/tutorials/REST/article.html)\n[![Spring Boot Framework](https://img.shields.io/badge/framework-Spring%20Boot-brightgreen.svg)](https://projects.spring.io/spring-boot/)\n\n## Technologies\n- Java JDK 17\n- Spring Boot 2.7+\n- Spring Data\n- Spring Admin Server\n- Spring Gateway\n- Spring Config Server\n- Spring Cloud OpenFeign\n- Spring Cloud Netflix Eureka\n- Maven\n- Cassandra\n- MySQL\n- ElasticSearch\n- RabbitMQ\n- Resillience4j\n- Docker - Docker Compose\n\n## Functional Services\nApp was decomposed into three core microservices. All of them are independently deployable applications, organized around certain business domains.\nAccount Service, Ticket Service and Notification Service.\n\n![Ticketapp](https://github.com/mertbesirli/ticket-app/assets/43350594/531b2d23-5ef1-4f87-8b61-febbd5220527)\n\n### API Gateway\n\nAs you can see, there are three core services, which expose external API to client. In a real-world systems, this number can grow very quickly as well as whole system complexity. Actually, hundreds of services might be involved in rendering of one complex webpage.\n\nIn theory, a client could make requests to each of the microservices directly. But obviously, there are challenges and limitations with this option, like necessity to know all endpoints addresses, perform http request for each peace of information separately, merge the result on a client side. Another problem is non web-friendly protocols which might be used on the backend.\n\nUsually a much better approach is to use API Gateway. It is a single entry point into the system, used to handle requests by routing them to the appropriate backend service or by invoking multiple backend services and aggregating the results.  Also, it can be used for authentication, insights, stress and canary testing, service migration, static response handling, active traffic management. Port number is 8088.\n\n### Eureka Server\n\nAnother commonly known architecture pattern is Service discovery. It allows automatic detection of network locations for service instances, which could have dynamically assigned addresses because of auto-scaling, failures and upgrades.\n\nThe key part of Service discovery is Registry. I use Netflix Eureka in this project. Eureka is a good example of the client-side discovery pattern, when client is responsible for determining locations of available service instances (using Registry server) and load balancing requests across them.\n\nWith Spring Boot, you can easily build Eureka Registry with spring-cloud-starter-eureka-server dependency, @EnableEurekaServer annotation and simple configuration properties.\n\nAlso, Eureka provides a simple interface, where you can track running services and a number of available instances: http://localhost:8761\n\n### Circuit Breaker\n\nResilience4j is the implementation of Circuit Breaker pattern, which gives a control over latency and failure from dependencies accessed over the network. The main idea is to stop cascading failures in a distributed environment with a large number of microservices. That helps to fail fast and recover as soon as possible - important aspects of fault-tolerant systems that self-heal.\n\n### RabbitMQ\n\n![Ticketapp - Page 2](https://github.com/mertbesirli/ticket-app/assets/43350594/c88089e4-8365-4451-921e-b3fede15c9bf)\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the MIT License. See `LICENSE.md` for more information\n\n[license-shield]: https://img.shields.io/badge/license-MIT%20License-green.svg\n[license-url]: https://github.com/mertbesirli/ticket-app/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmertbesirli%2Fticket-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmertbesirli%2Fticket-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmertbesirli%2Fticket-app/lists"}