The ARGO Messaging Service is a Publish/Subscribe Service, which implements the Google PubSub protocol. Instead of focusing on a single Messaging API specification for handling the logic of publishing/subscribing to the broker network the API focuses on creating nodes of Publishers and Subscribers as a Service. It provides an HTTP API that enables Users/Systems to implement message oriented services using the Publish/Subscribe Model over plain HTTP. In the Publish/Subscribe paradigm, Publishers are users/systems that can send messages to named-channels called Topics. Subscribers are users/systems that create Subscriptions to specific topics and receive messages.
- Golang 1.19
- The service has been tested with mongodb from version
3.2.22
up to4.2.3
.
- Kafka 2.2.1
- Zookeeper 3.4.5
In order to support push enabled subscriptions AMS relies on an external service that handles the actual pushing of messages, while AMS holds the configuration for the subscriptions.You can create push enabled subscriptions even when the push-server isn't available, they will be picked up automatically when the push-server is up and running.
Configuration for the service takes place inside a config.json
file, that
resides in two possible locations:
-
Same folder as the binary
-
/etc/argo-messaging/config.json
port
- port the service will bind tozookeeper_hosts
- list of zookeeper hosts, e.g. [zoo1:2181,zoo2:2181,zoo3:2181]store_host
- store host, e.g. 'mongo1:27017,mongo2:27017,mongo3:27017'store_db
- mongo db database namecertificate
- /path/to/tls/certificatecertificate_key
- /path/to/cert/leycertificate_authorities_dir
- dir containing CAslog_level
- DEBUG,INFO,WARNING, ERROR or FATALpush_enabled
- (true|false) whether or not the service will support push enabled subscriptionspush_tls_enabled
- (true|false), whether or not the service will communicate over TLS with the push serverpush_server_host
- push1.grnet.grpush_server_port
- 443verify_push_server
- (true|false) mutual TLS for the push serverpush_worker_token
- token for the active push worker userlog_facilities
- ["syslog", "console"]auth_option
- (key
|header
|both
), where should the service look for the access token.proxy_hostname
- The FQDN of any proxy or load balancer that might serve request in place of the AMS
Inside the project's root directory issue the command:
go test ./...
For the db store integration test suite, you can issue the command:
go test ./... -tags integration
In order to build the service, inside the AMS repo issue the command:
go build
In order to run the service,
./argo-messaging
Although AMS doesn't support direct authentication through an x509 certificate,
you can use the argo-authentication-service
to map an x509 certificate to an AMS key
.
The service will also validate the certificate.
The ams-library will effortlessly
hide this complexity if you decide to use it in order to access AMS.
In order to modify any .proto
file you will need the following
-
Read on how to install the protoc compiler on your platform here.
-
Install the go plugin.
go get -u github.com/golang/protobuf/protoc-gen-go
-
install the go gRPC package.
go get -u google.golang.org/grpc
-
Inside
push/grpc
compile.protoc -I proto/ proto/ams.proto --go_out=plugins=grpc:proto
Inside the tools folder you can find various scripts that can help you perform common tasks OR help you get started with interacting with AMS.
There is also a handy python library for interacting with AMS.
The ARGO Messaging Service is developed by GRNET
The work represented by this software was partially funded by
- EGI-ENGAGE project through the European Union (EU) Horizon 2020 program under Grant number 654142.
- EOSC-Hub project through the European Union (EU) Horizon 2020 program under Grant number 77753642.
- EOSC-Future project through the European Union (EU) Horizon 2020 program under Grant number 101017536.
- DICE project through the European Union (EU) Horizon 2020 program under Grant number 101017207.