Skip to content
This repository was archived by the owner on Feb 14, 2025. It is now read-only.

eigr/Astreu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

343ea83 · Apr 27, 2021
Apr 22, 2021
Apr 27, 2021
Apr 22, 2021
Jan 28, 2021
Feb 9, 2021
Feb 8, 2021
Feb 8, 2021
Apr 21, 2021
Apr 22, 2021

Repository files navigation

Astreu

High-performance Messaging System based on gRPC protocol written in Elixir (this is a WIP no production ready)

Astreu CI Astreu Release

Architecture Overview


                                     +-------------------------------+
                                     |           Astreu              |
                                     |                               |
                                     | +---------------------------+ |
    +-------------+                  | |     Management API        | |                   +-------------+
    | Subscribers |                  | +---------------------------+ |                   |  Producers  |
  +-------------+ |  Bi-directional  | +---------------------------+ |  Bi-directional   | +-------------+
+---------------| +----------------->+ |     PubSub Adapters       | +------------------>+ | +-------------+
| | |          || |    Streams       | +---------------------------+ |    Streams        | | |         | | |
| | |          || +<-----------------+ +---------------------------+ +<------------------+ | |         | | |
| | +-------------+                  | |      Core Protocol        | |                   +-------------+ | |
+-+-------------+                    | +---------------------------+ |                     +-------------+ |
                                     | +---------------------------+ |                       +-------------+
                                     | |        gRpc Server        | |
                                     | +---------------------------+ |
                                     +-------------------------------+


Usage and Installation

  • Run:
# docker run --rm --net=host -e RELEASE_NODE=unique_name_peer_node eigr/astreu:0.1.2
  • Connect as a Producer to the server from an SDK (Java SDK example below):
public static void main(final String[] args) {

    final Producer producer =
            Astreu.at("127.0.0.1", 9980)
            .asPub("test", UUID.randomUUID().toString().toLowerCase());

    final Publisher<ReplyMessage> publisher = producer.bind(); 

    Flux.from(publisher).subscribe(replyMessage -> {
        replyMessage.logger().info("Reply Message -> {}", replyMessage);
    });

    IntStream.range(0, 10).parallel().forEach(i -> {
        producer.publish(
                String.valueOf(i), 
                Any.newBuilder()
                        .setTypeUrl("io.astreu.custom/Text")
                        .setValue(ByteString.copyFrom(String.format("Hello World Astreu %s", i).getBytes()))
                        .build()
        );
    });
}
  • Connect as a Subscriber to the server from an SDK (Java SDK example below):
public static void main(final String[] args) {
    final Publisher<MessageWithContext> publisher =
            Astreu.at("127.0.0.1", 9980)
                    .asSub("test", "unique-subscription")
                    .receiveOnly(MessageType.EXCHANGE)
                    .bind(); 

    Flux.from(publisher).subscribe(messageWithContext -> {
        final AcknowledgeContext context = messageWithContext.getContext();

        context.logger().debug("Message type is -> {}", messageWithContext.getType());
        final Exchange message = messageWithContext.getMessage();

        context.logger().info("Incoming Message {}", message);
        context.accept();
    });
}

Client SDK's