{"id":24671857,"url":"https://github.com/ivan-montes/hello-armeria","last_synced_at":"2026-04-14T14:33:13.478Z","repository":{"id":268995901,"uuid":"906094020","full_name":"Ivan-Montes/hello-armeria","owner":"Ivan-Montes","description":"Hanging out with Spring and Armeria","archived":false,"fork":false,"pushed_at":"2025-02-24T08:14:15.000Z","size":175,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-18T10:52:23.954Z","etag":null,"topics":["armeria","grpc","java","rest-api","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ivan-Montes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2024-12-20T06:39:01.000Z","updated_at":"2025-02-24T08:14:18.000Z","dependencies_parsed_at":"2024-12-20T08:19:04.366Z","dependency_job_id":"f01987d2-8637-455b-b064-17a5fcfc43fd","html_url":"https://github.com/Ivan-Montes/hello-armeria","commit_stats":null,"previous_names":["ivan-montes/hello-armeria"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ivan-Montes/hello-armeria","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ivan-Montes%2Fhello-armeria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ivan-Montes%2Fhello-armeria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ivan-Montes%2Fhello-armeria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ivan-Montes%2Fhello-armeria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ivan-Montes","download_url":"https://codeload.github.com/Ivan-Montes/hello-armeria/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ivan-Montes%2Fhello-armeria/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268272952,"owners_count":24223790,"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-08-01T02:00:08.611Z","response_time":67,"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":["armeria","grpc","java","rest-api","spring"],"created_at":"2025-01-26T10:12:01.877Z","updated_at":"2026-04-14T14:33:13.443Z","avatar_url":"https://github.com/Ivan-Montes.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# hello-armeria\n\nHanging out with [Spring](https://spring.io/) and [Armeria](https://armeria.dev/) \n\n### Components\n| Name | gRPC Port | Web Port | Docs |\n|-----|-----|-----|-----|\n| rest-service | x | 8081 | 8091 |\n| rest-service-reactive | x | 8082 | 8092 |\n| rest-service-reactive-functional | x | 8083 | 8093 |\n| grpc-service | 50051 | x | 50051 |\n| grpc-service-reactive | 50052 | x | 50052 |\n| grpc-service-transcoding | 50053 | x | 50053 |\n| grpc-service-reactive-transcoding | 50054 | x | 50054 |\n| eureka-discovery | x | 8761 | x |\n| grpc-service-multi-instances | 55555 | x | 55555 |\n| grpc-client-service-multi-instance | 0 | x | 0 |\n| grpc-service-multi-instances-arm | 0 | x | 0 |\n| grpc-client-service-multi-instance-arm | 0 | x | 0 |\n\n### Installation\n\nDownload and compile\n\n```\nmvn clean compile\n```\nThen if you don't find all generated classes, please **update your project** from the specific pom.xml of that module\n\n### Usage\n\nFor REST services just use your preferred HTTP tool like [SoapUI](https://www.soapui.org/)\n\nYou can use [grpcurl](https://github.com/fullstorydev/grpcurl) to call gRPC services choosing the suitable port\n\n```\n- List services\n    grpcurl --plaintext localhost:50051 list\n   \n- Call method\n    grpcurl --plaintext localhost:50051 net.protobufs.TreeService.ListTrees\n    grpcurl --plaintext -d '{\"kingdom\":\"arborus\",\"family\":\"ent\",\"species\":\"sheep\"}' localhost:50051 net.protobufs.TreeService.CreateTree\n    grpcurl --plaintext -d '{\"treeId\":\"59679\", \"kingdom\":\"arborus\",\"family\":\"ent\",\"species\":\"shepherd\"}' localhost:50051 net.protobufs.TreeService.UpdateTree\n    grpcurl --plaintext -d '{\"treeId\":\"151526\"}' localhost:50051 net.protobufs.TreeService.DeleteTree        \n```\n\nAs the option UnframedRequests is enabled in gRPC services, you can also run [curl](https://curl.se/)\n\n```\ncurl -v -H \"Content-Type: application/json\" -d '{}' http://localhost:50052/net.protobufs.TreeService/ListTrees\ncurl -v -H \"Content-Type: application/json\" -d '{\"treeId\":\"7952\"}' http://localhost:50052/net.protobufs.TreeService/GetTree\ncurl -v -H \"Content-Type: application/json\" -d '{\"kingdom\":\"arborus\",\"family\":\"ent\",\"species\":\"sheep\"}' http://localhost:50052/net.protobufs.TreeService/CreateTree\n```\n\nHTTP/JSON to gRPC transcoding is explicitly enabled using .enableHttpJsonTranscoding(). This allows the server to convert HTTP/JSON requests into gRPC requests and vice versa. This option is currently developed in **grpc-server-transcoding** and **grpc-server-reactive-transcoding** modules.\n\n```\ncurl -v http://localhost:50053/api/v1/trees\ncurl -v http://localhost:50053/api/v1/trees/465984\ncurl -v -H \"Content-Type: application/json\" -d '{\"kingdom\":\"arborus\",\"family\":\"ent\",\"species\":\"wild\"}' http://localhost:50053/api/v1/trees\ncurl -v -H \"Content-Type: application/json\" -d '{\"treeId\":\"611605\",\"kingdom\":\"arborus\",\"family\":\"ent\",\"species\":\"oak\"}' http://localhost:50053/api/v1/trees/611605\ncurl -v -X \"DELETE\" http://localhost:50053/api/v1/treess/339919\n```\n\nIt is possible to use a browser to call a service using the documentation feature and the correct port shown in the Components section\n\n```\nhttp://localhost:8091/internal/docs\n```\n\nThere is a ready Eureka server necessary to check the compatibility with discovery services. The microservice **grpc-service-multi-instances** registers itself on Eureka and sends the gRPC number port. On the other hand, **grpc-client-service-multi-instance** exposes its endpoint but it doesn's have its own database, instead it uses a gRPC stub client to call the methods in grpc-service-multi-instances. Before doing so, it looks up the suitable hostname and port on the eureka-discovery microservice. So if you want to test this proof of concept (PoC), you should run the three components and call the port of grpc-client-service-multi-instance. In this case, It is used the dependency eureka client from Spring framework.\n\nArmeria has its own eureka dependecy, so I have created the same test environment but using this dependency. The microservicies are **grpc-service-multi-instances-arm** and **grpc-client-service-multi-instance-arm**. You could use the same Eureka server to check both of them.\n\n---\n\n[![Java](https://badgen.net/static/JavaSE/21/orange)](https://www.java.com/es/)\n[![Maven](https://badgen.net/badge/icon/maven?icon=maven\u0026label\u0026color=red)](https://https://maven.apache.org/)\n[![Spring](https://img.shields.io/badge/spring-blue?logo=Spring\u0026logoColor=white)](https://spring.io)\n[![GitHub](https://badgen.net/badge/icon/github?icon=github\u0026label)](https://github.com)\n[![Eclipse](https://badgen.net/badge/icon/eclipse?icon=eclipse\u0026label)](https://https://eclipse.org/)\n[![Armeria](https://badgen.net/static/Armeria/1.6/black)](https://www.java.com/es/)\n[![GPLv3 license](https://badgen.net/static/License/GPLv3/blue)](https://choosealicense.com/licenses/gpl-3.0/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-montes%2Fhello-armeria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivan-montes%2Fhello-armeria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-montes%2Fhello-armeria/lists"}