{"id":21625383,"url":"https://github.com/eigr/astreu","last_synced_at":"2025-07-17T11:31:30.401Z","repository":{"id":52625236,"uuid":"333620308","full_name":"eigr/Astreu","owner":"eigr","description":"High-performance Messaging System based on a gRPC protocol","archived":true,"fork":false,"pushed_at":"2021-04-27T01:39:37.000Z","size":6912,"stargazers_count":16,"open_issues_count":5,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T18:02:16.188Z","etag":null,"topics":["grpc","message-broker","message-bus","message-queue","messaging","network"],"latest_commit_sha":null,"homepage":"https://eigr.io/astreu","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eigr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-28T02:18:38.000Z","updated_at":"2025-02-14T23:05:59.000Z","dependencies_parsed_at":"2022-09-07T09:30:51.895Z","dependency_job_id":null,"html_url":"https://github.com/eigr/Astreu","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/eigr/Astreu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2FAstreu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2FAstreu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2FAstreu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2FAstreu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eigr","download_url":"https://codeload.github.com/eigr/Astreu/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2FAstreu/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265600574,"owners_count":23795717,"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":["grpc","message-broker","message-bus","message-queue","messaging","network"],"created_at":"2024-11-25T01:09:02.941Z","updated_at":"2025-07-17T11:31:30.053Z","avatar_url":"https://github.com/eigr.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Astreu\n\n**High-performance Messaging System based on gRPC protocol written in Elixir** (***this is a WIP no production ready***)\n\n![Astreu CI](https://github.com/eigr/Astreu/workflows/Astreu%20CI/badge.svg) [![Astreu Release](https://github.com/eigr/Astreu/actions/workflows/release.yml/badge.svg)](https://github.com/eigr/Astreu/actions/workflows/release.yml)\n\n## Architecture Overview\n\n```\n\n                                     +-------------------------------+\n                                     |           Astreu              |\n                                     |                               |\n                                     | +---------------------------+ |\n    +-------------+                  | |     Management API        | |                   +-------------+\n    | Subscribers |                  | +---------------------------+ |                   |  Producers  |\n  +-------------+ |  Bi-directional  | +---------------------------+ |  Bi-directional   | +-------------+\n+---------------| +-----------------\u003e+ |     PubSub Adapters       | +------------------\u003e+ | +-------------+\n| | |          || |    Streams       | +---------------------------+ |    Streams        | | |         | | |\n| | |          || +\u003c-----------------+ +---------------------------+ +\u003c------------------+ | |         | | |\n| | +-------------+                  | |      Core Protocol        | |                   +-------------+ | |\n+-+-------------+                    | +---------------------------+ |                     +-------------+ |\n                                     | +---------------------------+ |                       +-------------+\n                                     | |        gRpc Server        | |\n                                     | +---------------------------+ |\n                                     +-------------------------------+\n\n\n```\n\n## Usage and Installation\n\n* Run:\n\n```\n# docker run --rm --net=host -e RELEASE_NODE=unique_name_peer_node eigr/astreu:0.1.2\n```\n\n* Connect as a Producer to the server from an SDK (Java SDK example below):\n\n```java\npublic static void main(final String[] args) {\n\n    final Producer producer =\n            Astreu.at(\"127.0.0.1\", 9980)\n            .asPub(\"test\", UUID.randomUUID().toString().toLowerCase());\n\n    final Publisher\u003cReplyMessage\u003e publisher = producer.bind(); \n\n    Flux.from(publisher).subscribe(replyMessage -\u003e {\n        replyMessage.logger().info(\"Reply Message -\u003e {}\", replyMessage);\n    });\n\n    IntStream.range(0, 10).parallel().forEach(i -\u003e {\n        producer.publish(\n                String.valueOf(i), \n                Any.newBuilder()\n                        .setTypeUrl(\"io.astreu.custom/Text\")\n                        .setValue(ByteString.copyFrom(String.format(\"Hello World Astreu %s\", i).getBytes()))\n                        .build()\n        );\n    });\n}\n```\n\n* Connect as a Subscriber to the server from an SDK (Java SDK example below):\n\n```java\npublic static void main(final String[] args) {\n    final Publisher\u003cMessageWithContext\u003e publisher =\n            Astreu.at(\"127.0.0.1\", 9980)\n                    .asSub(\"test\", \"unique-subscription\")\n                    .receiveOnly(MessageType.EXCHANGE)\n                    .bind(); \n\n    Flux.from(publisher).subscribe(messageWithContext -\u003e {\n        final AcknowledgeContext context = messageWithContext.getContext();\n\n        context.logger().debug(\"Message type is -\u003e {}\", messageWithContext.getType());\n        final Exchange message = messageWithContext.getMessage();\n\n        context.logger().info(\"Incoming Message {}\", message);\n        context.accept();\n    });\n}\n```\n\n## Client SDK's\n\n* [Astreu4j](https://github.com/eigr/astreu4j)\n* [GO Lang Astreu](https://github.com/eigr/astreu-go)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigr%2Fastreu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feigr%2Fastreu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigr%2Fastreu/lists"}