Introdução #
O Mastodon possui uma API RMQ, ela deve ser usada quando a aplicação é high performance.
Headers #
Toda mensagem enviada ou recebida pelo Mastodon utiliza headers. Segue a tabela de suas definições.
chave | descrição |
---|---|
m-block-uid | UID do block |
m-rpc | ação chamada |
m-sig | signify do payload |
m-uid | UID da aplicação |
m-v | versao do mastodon |
* | header de index |
m-block-uid #
m-rpc #
Representa a ação desejada. São elas:
- block.create: criar um block
- block.read: receber um ou mais blocks
m-sig #
Representa a assinatura do payload. Caso seja uma mensagem enviada pela aplicação, ela e’ assinada com a chave privada da mesma. Caso seja uma mensagem enviada pelo Mastodon, sera’ usada a chave privada do Mastodon.
m-uid #
Representa a UID da aplicação. Unica e imutavel.
m-v #
Representa a versão do Mastodon.
* #
Qualquer header que não tem o prefix m- sera’ usada como indexador do block.
Exemplo:
chave | valor |
---|---|
cc | 1234 |
direction | in |
type | pix |
O Mastodon vai criar o metadado cc com valor 1234, direction com valor in e type com valor pix.
Connection #
Para conectar no Mastodon dentro do Datacenter da StarOne.
URI: amqp://$USER:$KEY@rmq.starone.one/mastodon
Onde $USER deve ser trocado pelo seu usuario e $KEY por sua chave secreta.
Workflow #
- A Aplicação deve se conectar ao rabbitmq.
- Quando conectar deve-se criar dois Channels, um de receive e outro de sender. Toda mensagem consumida deve vir do channel receive, e por sua vez, toda mensagem enviada ao rabbitmq deve ser feita a partir do sender.
- O channel receive deve consumir as mensagens da Queue: channel-app, onde app deve ser trocado pelo UID da sua aplicacao. Por exemplo, se sua app tem o UID 45ab12, o nome da queue vai ser channel-45ab12.
- O envio de mensagens de request e block deve ser feito com o channel sender para a exchange mastodon.
Recomendações #
- Abrir apenas uma connection por aplicação.
- Utilizar dois channels, um para escrita, outro para leitura.
- Consumir as mensagens o mais rapido possível, elas tem um TTL de 1 minuto.
Block #
Create #
Use header: m-rpc => block.create para criar um block.
Estrutura #
As mensagens de block devem conter os seguintes headers:
chave | descrição |
---|---|
m-uid | UID da aplicação |
m-sig | signify do payload |
m-rpc | block.create |
O payload deve conter o block que deseja persistir.
Workflow #
- O UID da Aplicação deve ser atribuido ao header m-uid do payload.
- O block deve ser atribuido ao body do payload que sera' enviado via o channel sender.
- A Aplicação deve utilizar a chave privada para criar uma assinatura do block. Essa assinatura deve ser atribuida ao header m-sig do payload.
- Completado os passos anteriores, o payload pode agora ser enviado para a exchage no rabbitmq.
Notificação de Sucesso #
Toda mensagem de block retorna uma mensagem de sucesso com a seguinte estrutura de headers:
chave | descrição |
---|---|
m-uid | UID da aplicação |
m-sig | signify do payload |
O signify do payload é o mesmo utilizado no envio da mensagem de block.
Notificação de Falha #
Não existe uma mensagem de notificação de falha na criação do block.
Read #
Para ler um ou mais blocks, use header: m-rpc => block.read.
Estrutura #
As mensagens de block devem conter os seguintes headers:
chave | descrição |
---|---|
m-rpc | block.read |
m-uid | UID da aplicação |
m-sig | signify do payload |