{"id":21076352,"url":"https://github.com/rapter1990/springbootmicroservices","last_synced_at":"2025-05-16T06:32:14.540Z","repository":{"id":49385297,"uuid":"517040932","full_name":"Rapter1990/SpringBootMicroservices","owner":"Rapter1990","description":"Spring Boot Microservice Example(Eureka Server, Config Server, API Gateway, Services , RabbitMq, Keycloak)","archived":false,"fork":false,"pushed_at":"2023-01-01T19:10:45.000Z","size":1194,"stargazers_count":81,"open_issues_count":3,"forks_count":36,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-04-24T06:34:07.135Z","etag":null,"topics":["api-gateway","configserver","docker","docker-compose","eureka-server","java","keycloak","microservices","rabbitmq","service","spring-boot","spring-cloud","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rapter1990.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-23T11:38:47.000Z","updated_at":"2024-04-15T23:23:36.000Z","dependencies_parsed_at":"2023-02-01T00:31:28.069Z","dependency_job_id":null,"html_url":"https://github.com/Rapter1990/SpringBootMicroservices","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2FSpringBootMicroservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2FSpringBootMicroservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2FSpringBootMicroservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2FSpringBootMicroservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rapter1990","download_url":"https://codeload.github.com/Rapter1990/SpringBootMicroservices/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225413236,"owners_count":17470542,"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":["api-gateway","configserver","docker","docker-compose","eureka-server","java","keycloak","microservices","rabbitmq","service","spring-boot","spring-cloud","spring-security"],"created_at":"2024-11-19T19:28:00.624Z","updated_at":"2024-11-19T19:28:01.186Z","avatar_url":"https://github.com/Rapter1990.png","language":"Java","readme":"# Spring Boot Microservice Example(Eureka Server, Config Server, API Gateway, Services , RabbitMq, Keycloak)\n\n\u003cimg src=\"screenshots/springbootmicroservices.drawio_image.png\" alt=\"Main Information\" width=\"800\" height=\"900\"\u003e\n\n# About the project\n\u003cul style=\"list-style-type:disc\"\u003e\n  \u003cli\u003eUser can register and login through Keycloak\u003c/li\u003e\n  \u003cli\u003eUser can register and login through Keycloak\u003c/li\u003e\n  \u003cli\u003eAdmin can create, update, delete advertisement and get advertisement by its is and get all advertisements from management service to advertisement service through API Gateway\u003c/li\u003e\n  \u003cli\u003eAdmin can approve and reject advertisement from advertisement service to report service by using managment service through API Gateway\u003c/li\u003e\n  \u003cli\u003eUser canget advertisement by its is and get all advertisements from management service to advertisement service through API Gateway\u003c/li\u003e\n  \u003cli\u003eThe view count of the approved advertisement are increasing when user try to show it\u003c/li\u003e\n\u003c/ul\u003e\n\n7 services whose name are shown below have been devised within the scope of this project.\n\n- Config Server\n- Eureka Server\n- API Gateway\n- User Service\n- Management Service\n- Advertisement Service\n- Report Service\n\n### 🔨 Run the App\n\n\u003cb\u003eDocker\u003c/b\u003e\n\n\u003cb\u003e1 )\u003c/b\u003e Install \u003cb\u003eDocker Desktop\u003c/b\u003e. Here is the installation \u003cb\u003elink\u003c/b\u003e : https://docs.docker.com/docker-for-windows/install/\n\n\u003cb\u003e2 )\u003c/b\u003e Open \u003cb\u003eTerminal\u003c/b\u003e under \u003cb\u003eresources\u003c/b\u003e folder to run \u003cb\u003eKeycloak\u003c/b\u003e and \u003cb\u003eRabbitMq\u003c/b\u003e on \u003cb\u003eDocker\u003c/b\u003e Container\n```\n    docker-compose up -d\n```\n\u003cb\u003e3 )\u003c/b\u003e Implement Keycloak Settings\n```\n    1 ) Open Keycloak on the Browser through localhost:8181\n    2 ) Enter username and password (admin : admin)\n    3 ) Create Client named for spring-boot-microservice-keycloak and define it in Keycloak config of user service\n    4 ) Change client's access type from public to confidential\n    5 ) Get secret key to define clientSecret in Keycloak config of user service\n    6 ) Define roles for Admin and User as ROLE_ADMIN and ROLE_USER\n```\n\n\u003cb\u003e4 )\u003c/b\u003e Implement Rabbitmq Settings\n```\n    1 ) Open Rabbitmq on the Browser through http://localhost:15672\n    2 ) Enter username and password (rabbitmq : 123456)\n    3 ) Open Admin section in the navbar\n    4 ) Define new user named guest and its username , password (guest : guest , role : administrator) , next give all permissiion (Virtual host : \"/\" , regexp : \".*\")\n```\n\n\u003cb\u003eMaven\u003e\u003c/b\u003e\n\n\u003cb\u003e1 )\u003c/b\u003e Start Keycloak and Rabbit through Docker\n\n\u003cb\u003e2 )\u003c/b\u003e Implement their settings\n\n\u003cb\u003e3 )\u003c/b\u003e Download your project from this link `https://github.com/Rapter1990/SpringBootMicroservices`\n\n\u003cb\u003e4 )\u003c/b\u003e Go to the project's home directory :  `cd SpringBootMicroservices`\n\n\u003cb\u003e5 )\u003c/b\u003e Create a jar file though this command `mvn clean install`\n\n\u003cb\u003e6 )\u003c/b\u003e Run the project though this command `mvn spring-boot:run`\n\n\n### To execute the API's through the gateway\n    1) http://localhost:8600/api/v1/users/signup\n    2) http://localhost:8600/api/v1/users/login\n    3) http://localhost:8600/api/v1/users/info \n    4) http://localhost:8600/api/v1/management/admin_role/create/{user_id} \n    5) http://localhost:8600/api/v1/management/admin_role/alladvertisements\n    6) http://localhost:8600/api/v1/management/admin_role/alladvertisements/{advertisement_id} \n    7) http://localhost:8600/api/v1/management/admin_role/update/{advertisement_id}\n    8) http://localhost:8600/api/v1/management/admin_role/delete/{advertisement_id} \n    9) http://localhost:8600/api/v1/management/admin_role/advertisement/{advertisement_id}/approve\n    10) http://localhost:8600/api/v1/management/admin_role/advertisement/{advertisement_id}/reject\n    11) http://localhost:8600/api/v1/management/user_role/alladvertisements\n    12) http://localhost:8600/api/v1/management/user_role/advertisement/{advertisement_id} \n    \n\nExplore Rest APIs\n\u003ctable style=\"width:100%\"\u003e\n  \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eUrl\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eValid Request Body\u003c/th\u003e\n      \u003cth\u003eValid Request Params\u003c/th\u003e\n      \u003cth\u003eValid Request Params and Body\u003c/th\u003e\n      \u003cth\u003eNo Request or Params\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003ePOST\u003c/td\u003e\n      \u003ctd\u003esignup\u003c/td\u003e\n      \u003ctd\u003eSign Up for User and Admin\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#signup\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003ePOST\u003c/td\u003e\n      \u003ctd\u003elogin\u003c/td\u003e\n      \u003ctd\u003eLogin\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#login\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003einfo\u003c/td\u003e\n      \u003ctd\u003eGet User's Role Information (ROLE_USER or ROLE_ADMIN)\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#info\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n     \u003ctd\u003ePOST\u003c/td\u003e\n     \u003ctd\u003ecreate/{user_id}\u003c/td\u003e\n     \u003ctd\u003eCreate Advertisement for User\u003c/td\u003e\n     \u003ctd\u003e\u003c/td\u003e\n     \u003ctd\u003e\u003c/td\u003e\n     \u003ctd\u003e\u003ca href=\"README.md#create\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n     \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003ealladvertisements\u003c/td\u003e\n      \u003ctd\u003eGet all advertisements From Admin\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#alladvertisementsFromAdmin\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003ealladvertisements/{advertisement_id}\u003c/td\u003e\n      \u003ctd\u003eGet advertisement by Id From Admin\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#advertisementById\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003ePUT\u003c/td\u003e\n      \u003ctd\u003eupdate/{advertisement_id}\u003c/td\u003e\n      \u003ctd\u003eUpdate advertisement by Id\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#update\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eDELETE\u003c/td\u003e\n      \u003ctd\u003edelete/{advertisement_id} \u003c/td\u003e\n      \u003ctd\u003eDelete advertisement by Id\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#delete\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003eadvertisement/{advertisement_id}/approve\u003c/td\u003e\n      \u003ctd\u003eApprove advertisement By Id\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#approve\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003eadvertisement/{advertisement_id}/reject\u003c/td\u003e\n      \u003ctd\u003eReject advertisement By Id\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#reject\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003ealladvertisements\u003c/td\u003e\n      \u003ctd\u003eGet all advertisements From User\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#alladvertisementsFromUser\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003ealladvertisements\u003c/td\u003e\n      \u003ctd\u003ealladvertisements/{advertisement_id}\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#advertisementByIdFromUser\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n### Used Dependencies\n* Core\n  * Spring\n    * Spring Boot\n    * Spring Security\n    * Spring Web\n      * RestTemplate\n    * Spring Data\n      * Spring Data JPA\n    * Spring Cloud\n      * Spring Cloud Gateway Server\n      * Spring Cloud Config Server\n      * Spring Cloud Config Client\n  * Netflix\n    * Eureka Server\n    * Eureka Client\n* Database\n  * Mysql\n* Message Broker\n  * RabbitMQ\n* Security\n  * Keycloak Server\n  * Keycloak OAuth2\n  * Keycloak REST API\n\n## Valid Request Body\n\n##### \u003ca id=\"signup\"\u003eSign Up for User and Admin\n```\n    http://localhost:8600/api/v1/users/signup\n\n    {\n        \"username\" : \"springbootmicroserviceuser\",\n        \"password\" : \"user123456\",\n        \"name\" : \"Micro User\",\n        \"surname\" : \"User Surname\",\n        \"phoneNumber\" : \"123456789\",\n        \"email\" : \"springbootmicroserviceuser@user.com\",\n        \"role\" : \"ROLE_USER\"\n    }\n\n    http://localhost:8600/api/v1/users/signup\n\n    {\n        \"username\" : \"springbootmicroserviceadmin\",\n        \"password\" : \"admin123456\",\n        \"name\" : \"Micro Admin\",\n        \"surname\" : \"Admin Surname\",\n        \"phoneNumber\" : \"123456789\",\n        \"email\" : \"springbootmicroserviceadmin@admin.com\",\n        \"role\" : \"ROLE_ADMIN\"\n    }\n```\n\n##### \u003ca id=\"login\"\u003eLogin\n```\n    http://localhost:8600/api/v1/users/login\n    Bearer Token : Access Token of User from Keycloak\n    {\n        \"username\" : \"springbootmicroserviceuser\",\n        \"password\" : \"user123456\"\n    }\n\n    http://localhost:8600/api/v1/users/login\n    Bearer Token : Access Token of Admin from Keycloak\n    {\n        \"username\" : \"springbootmicroserviceadmin\",\n        \"password\" : \"admin123456\"\n    }\n```\n\n## Valid Request Params\n\n##### \u003ca id=\"advertisementById\"\u003eGet advertisement by Id From Admin\n```\n    http://localhost:8600/api/v1/management/admin_role/alladvertisements/{advertisement_id} \n    Bearer Token : Access Token of Admin from Keycloak\n```\n\n##### \u003ca id=\"delete\"\u003eDelete advertisement by Id \n```\n    http://localhost:8600/api/v1/management/admin_role/delete/{advertisement_id} \n    Bearer Token : Access Token of Admin from Keycloak\n```\n\n##### \u003ca id=\"approve\"\u003eApprove advertisement By Id\n```\n    http://localhost:8600/api/v1/management/admin_role/advertisement/{advertisement_id}/approve\n    Bearer Token : Access Token of Admin from Keycloak\n```\n\n##### \u003ca id=\"reject\"\u003eReject advertisement By Id\n```\n    http://localhost:8600/api/v1/management/admin_role/advertisement/{advertisement_id}/reject\n    Bearer Token : Access Token of Admin from Keycloak\n```\n\n##### \u003ca id=\"advertisementByIdFromUser\"\u003eGet advertisement by Id From User\n```\n    http://localhost:8600/api/v1/management/user_role/alladvertisements/{advertisement_id} \n    Bearer Token : Access Token of Admin from Keycloak\n```\n\n## Valid Request Params and Body\n\n##### \u003ca id=\"create\"\u003eCreate Advertisement for User\n```\n    http://localhost:8600/api/v1/management/admin_role/create/{user_id} \n    Bearer Token : Access Token from Keycloak\n    {\n        \"title\" : \"Advertisement 1 for User 1\",\n        \"price\" : 200\n    }\n```\n\n##### \u003ca id=\"update\"\u003eCreate Route by City Id and Destination City Id\n```\n    http://localhost:8600/api/v1/management/admin_role/update/{advertisement_id}\n    Bearer Token : Access Token from Keycloak \n    {\n        \"title\" : \"Advertisement 1 for User 1 Updated\",\n        \"price\" : 300\n    }\n```\n\n## No Request or Params\n\n##### \u003ca id=\"info\"\u003e Get User's Role Information (ROLE_USER or ROLE_ADMIN)\n```\n    http://localhost:8600/api/v1/users/info\n    Bearer Token : Access Token of Admin or User from Keycloak \n```\n\n##### \u003ca id=\"alladvertisementsFromAdmin\"\u003e Get all advertisements From Admin\n```\n    http://localhost:8600/api/v1/management/admin_role/alladvertisements\n    Bearer Token : Access Token of Admin from Keycloak \n```\n\n##### \u003ca id=\"advertisementByIdFromUser\"\u003e Get all advertisements From User\n```\n    http://localhost:8600/api/v1/management/user_role/alladvertisements\n    Bearer Token : Access Token of User from Keycloak \n```\n\n### Screenshots\n\n\u003cdetails\u003e\n\u003csummary\u003eClick here to show the screenshots of project\u003c/summary\u003e\n    \u003cp\u003e Figure 1 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_1.PNG\"\u003e\n    \u003cp\u003e Figure 2 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_2.PNG\"\u003e\n    \u003cp\u003e Figure 3 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_3.PNG\"\u003e\n    \u003cp\u003e Figure 4 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_4.PNG\"\u003e\n    \u003cp\u003e Figure 5 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_5.PNG\"\u003e\n    \u003cp\u003e Figure 6 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_6.PNG\"\u003e\n    \u003cp\u003e Figure 7 \u003c/p\u003e\n    \u003cimg src =\"screenshots/keycloak_7.PNG\"\u003e\n    \u003cp\u003e Figure 8 \u003c/p\u003e\n    \u003cimg src =\"screenshots/rabbitmq_1.PNG\"\u003e\n    \u003cp\u003e Figure 9 \u003c/p\u003e\n    \u003cimg src =\"screenshots/rabbitmq_2.PNG\"\u003e\n    \u003cp\u003e Figure 10 \u003c/p\u003e\n    \u003cimg src =\"screenshots/rabbitmq_3.PNG\"\u003e\n    \u003cp\u003e Figure 11 \u003c/p\u003e\n    \u003cimg src =\"screenshots/rabbitmq_4.PNG\"\u003e\n\u003c/details\u003e   ","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapter1990%2Fspringbootmicroservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frapter1990%2Fspringbootmicroservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapter1990%2Fspringbootmicroservices/lists"}