{"id":31441282,"url":"https://github.com/sumedhahire/spring-boot-eureka-grpc-feign-simplified","last_synced_at":"2025-10-05T10:28:34.930Z","repository":{"id":317316251,"uuid":"1066126530","full_name":"sumedhahire/spring-boot-eureka-grpc-feign-simplified","owner":"sumedhahire","description":"Spring Boot tutorial: bidirectional microservices using Eureka, Feign, gRPC, and Hibernate.","archived":false,"fork":false,"pushed_at":"2025-09-30T05:32:38.000Z","size":26,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-30T07:16:30.377Z","etag":null,"topics":["eureka-client","eureka-discovery-service","eureka-server","feign","feign-client-example","grpc","hibernate-jpa","intellij","java","lombak","maven","microservices-architecture","pom","spring-boot","spring-mvc"],"latest_commit_sha":null,"homepage":"https://www.sumedhahire.info","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/sumedhahire.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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-29T04:06:10.000Z","updated_at":"2025-09-30T05:52:47.000Z","dependencies_parsed_at":"2025-09-30T07:17:15.178Z","dependency_job_id":"5d5ed0e0-bc1c-4cbe-a8d8-3044bf03b47f","html_url":"https://github.com/sumedhahire/spring-boot-eureka-grpc-feign-simplified","commit_stats":null,"previous_names":["sumedhahire/spring-boot-eureka-simplified"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sumedhahire/spring-boot-eureka-grpc-feign-simplified","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumedhahire%2Fspring-boot-eureka-grpc-feign-simplified","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumedhahire%2Fspring-boot-eureka-grpc-feign-simplified/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumedhahire%2Fspring-boot-eureka-grpc-feign-simplified/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumedhahire%2Fspring-boot-eureka-grpc-feign-simplified/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sumedhahire","download_url":"https://codeload.github.com/sumedhahire/spring-boot-eureka-grpc-feign-simplified/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumedhahire%2Fspring-boot-eureka-grpc-feign-simplified/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277714459,"owners_count":25864449,"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","status":"online","status_checked_at":"2025-09-30T02:00:09.208Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["eureka-client","eureka-discovery-service","eureka-server","feign","feign-client-example","grpc","hibernate-jpa","intellij","java","lombak","maven","microservices-architecture","pom","spring-boot","spring-mvc"],"created_at":"2025-09-30T16:03:02.916Z","updated_at":"2025-09-30T16:05:45.803Z","avatar_url":"https://github.com/sumedhahire.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- README snippet — paste into README.md --\u003e\n\u003ch1\u003espringboot-microservices-eureka-grpc-feign-tutorial\u003c/h1\u003e\n\n\u003c!-- \u003cp\u003e\n  \u003cimg src=\"assets/demo-gif.gif\" alt=\"demo\" width=\"720\" /\u003e\n\u003c/p\u003e\n --\u003e\n\u003cp\u003e\n  \u003cimg src=\"https://img.shields.io/badge/type-tutorial-green\" alt=\"tutorial\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/springboot-3.x-blue\" alt=\"spring boot\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/eureka-registered-yellow\" alt=\"eureka\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/grpc-supported-lightgrey\" alt=\"grpc\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/feign-client-blueviolet\" alt=\"feign\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/hibernate-5.x-orange\" alt=\"hibernate\" /\u003e\n\u003c/p\u003e\n\n\u003cp\u003eA compact hands-on tutorial (its simple rest assure). Two Spring Boot services register with Eureka and communicate using Feign (REST) and gRPC.\u003c/p\u003e\n\n\u003ch2\u003eTable of contents\u003c/h2\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"#overview\"\u003eOverview\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#structure\"\u003eRepo structure\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#quickstart\"\u003eQuickstart\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#run-manually\"\u003eRun manually\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#test-examples\"\u003eTest examples\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr/\u003e\n\n\u003ch2 id=\"overview\"\u003eOverview\u003c/h2\u003e\n\u003cp\u003e\n  \u003cstrong\u003eNotes on modules:\u003c/strong\u003e\n\u003c/p\u003e\n\u003cp\u003e\n  \u003cstrong\u003eNotes on modules:\u003c/strong\u003e\n\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003cstrong\u003ecommon-lib\u003c/strong\u003e: Shared models used by both gRPC and Feign clients for type consistency.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eorder\u003c/strong\u003e: Provides REST and gRPC endpoints; also consumes endpoints from \u003cstrong\u003eproduct\u003c/strong\u003e.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eproduct\u003c/strong\u003e: Provides REST and gRPC endpoints; also consumes endpoints from \u003cstrong\u003eorder\u003c/strong\u003e.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eeureka-server\u003c/strong\u003e: Handles service registration and discovery, enabling both applications to find each other dynamically.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cp\u003e\n  This design allows \u003cstrong\u003ebidirectional communication\u003c/strong\u003e between \u003cstrong\u003eorder\u003c/strong\u003e and \u003cstrong\u003eproduct\u003c/strong\u003e via Feign (REST) and gRPC, with all shared data models maintained in \u003cstrong\u003ecommon-lib\u003c/strong\u003e.\n\u003c/p\u003e\n\n\u003ch2 id=\"prerequisites\"\u003ePrerequisites\u003c/h2\u003e\n\u003cul\u003e\n  \u003cli\u003eJava 17+\u003c/li\u003e\n  \u003cli\u003eMaven 3.8+\u003c/li\u003e\n  \u003cli\u003edocker \u0026amp; docker-compose (optional)\u003c/li\u003e\n  \u003cli\u003egrpcurl (optional)\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2 id=\"structure\"\u003eRepo structure\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003emicroservices/\n├── eureka-server/\n├── order/       # feign client + grpc client\n├── product/       # rest + grpc server\n└── common-proto/    # hello.proto\n\u003c/code\u003e\u003c/pre\u003e\n\n\u003ch2 id=\"quickstart\"\u003eQuickstart (one-command)\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003egit clone https://github.com/sumedhahire/spring-boot-eureka-simplified\n./mvnw -pl eureka-service,order,product clean package -DskipTests\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eEureka UI: \u003ca href=\"http://localhost:8761\"\u003ehttp://localhost:8761\u003c/a\u003e\u003c/p\u003e\n\n\u003ch2 id=\"run-manually\"\u003eRun manually\u003c/h2\u003e\n\u003col\u003e\n  \u003cli\u003eStart Eureka:\n    \u003cpre\u003e\u003ccode\u003ecd eureka-server\n./mvnw spring-boot:run\u003c/code\u003e\u003c/pre\u003e\n  \u003c/li\u003e\n  \u003cli\u003eStart service-b (provider):\n    \u003cpre\u003e\u003ccode\u003ecd ../product\n./mvnw spring-boot:run\u003c/code\u003e\u003c/pre\u003e\n  \u003c/li\u003e\n  \u003cli\u003eStart service-a (consumer):\n    \u003cpre\u003e\u003ccode\u003ecd ../order\n./mvnw spring-boot:run\u003c/code\u003e\u003c/pre\u003e\n  \u003c/li\u003e\n\u003c/ol\u003e\n\n\u003ch2 id=\"test-examples\"\u003eTest examples\u003c/h2\u003e\n\u003ch3\u003eFeign (REST)\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003ecurl http://localhost:8080/hello/feign\n# {\"message\":\"Hello from service-b (rest)\"}\u003c/code\u003e\u003c/pre\u003e\n\n\u003ch3\u003egRPC\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003egrpcurl -plaintext -d '{\"name\":\"sumedh\"}' localhost:9090 hello.HelloService/SayHello\n# {\"message\":\"Hello sumedh from gRPC\"}\u003c/code\u003e\u003c/pre\u003e\n\n\u003ch2 id=\"contributing\"\u003eContributing\u003c/h2\u003e\n\u003cp\u003eUse labels: \u003ccode\u003egood first issue\u003c/code\u003e, \u003ccode\u003eenhancement\u003c/code\u003e, \u003ccode\u003ebug\u003c/code\u003e. Keep PRs small and reference the step affected.\u003c/p\u003e\n\n\u003ch2 id=\"license\"\u003eLicense\u003c/h2\u003e\n\u003cp\u003eMIT. See \u003ccode\u003eLICENSE\u003c/code\u003e.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eNotes\u003c/summary\u003e\n  \u003cp\u003eGitHub strips \u0026lt;style\u0026gt; and many attributes. This HTML uses supported tags only so it renders inside README.md. For a full HTML/CSS page host it via GitHub Pages and put the file in \u003ccode\u003e/docs\u003c/code\u003e or use the \u003ccode\u003egh-pages\u003c/code\u003e branch.\u003c/p\u003e\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumedhahire%2Fspring-boot-eureka-grpc-feign-simplified","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsumedhahire%2Fspring-boot-eureka-grpc-feign-simplified","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumedhahire%2Fspring-boot-eureka-grpc-feign-simplified/lists"}