Python SDK para LiteMQ/ProcedereMQ
Project description
ProcedereMQ
Broker de filas leve com transporte HTTP/TCP e SDKs para Go, Python e Node.js.
Segurança
- A API HTTP agora usa
Basic Authcomusername/password, mais proximo do modelo de brokers como ActiveMQ - O TCP agora usa
AUTH <username> <password>no lugar de token fixo - O binario do servidor falha ao iniciar sem credenciais de API, exceto se
ALLOW_INSECURE_AUTH=truefor definido para desenvolvimento isolado - O dashboard
/uiusa login e senha com sessao por cookie quandoUI_USERNAMEeUI_PASSWORDouUI_PASSWORD_HASHestao configurados - Para producao, prefira
UI_PASSWORD_HASHcombcryptno lugar de senha em texto puro - O WebSocket
/wse as rotas usadas pelo dashboard aceitam a sessao do UI; SDKs e acesso programatico usamusername/passworddiretamente - O servidor aplica limite de body HTTP, rate limit basico por IP e timeouts de conexao
- O container Docker roda como usuario nao-root e o
docker-composepublica portas apenas em127.0.0.1
Subindo com Docker
Defina as credenciais da API e do dashboard antes de iniciar:
Gere hashes bcrypt para API e UI:
make hash-password PASSWORD='senha-forte-api'
make hash-password PASSWORD='senha-forte-ui'
export API_USERNAME='api-user'
export API_PASSWORD_HASH='$2b$12$hash_bcrypt_da_api'
export UI_USERNAME='admin'
export UI_PASSWORD_HASH='$2b$12$hash_bcrypt_do_ui'
docker compose up --build
Depois acesse http://127.0.0.1:65090/ui e entre com login e senha.
SDK Go
Import:
import "github.com/jeffersontadeuleite/procedereMQ/pkg/sdk"
Como criar um Producer:
- Crie o contexto com
context.Background() - Crie o producer com
sdk.NewProducer(baseURL, queue) - Publique mensagens com
producer.Publish(...)
client := sdk.NewClientWithOptions("http://127.0.0.1:65090", sdk.ClientOptions{
Username: "api-user",
Password: "senha-forte-api",
})
ctx := context.Background()
producer, err := sdk.NewProducerWithClient(client, "emails")
if err != nil {
return err
}
job, err := producer.Publish(ctx, map[string]any{
"to": "alice@example.com",
"template": "welcome",
}, sdk.PublishOptions{MaxRetry: 3})
if err != nil {
return err
}
fmt.Println("job criado:", job.ID)
Como criar um Consumer:
- Crie o consumer com
sdk.NewConsumer(baseURL, queue) - Receba jobs com
consumer.Receive(ctx) - Finalize com
consumer.AckJob(ctx, job)ouconsumer.FailJob(ctx, job)
client := sdk.NewClientWithOptions("http://127.0.0.1:65090", sdk.ClientOptions{
Username: "api-user",
Password: "senha-forte-api",
})
ctx := context.Background()
consumer, err := sdk.NewConsumerWithClient(client, "emails")
if err != nil {
return err
}
job, err := consumer.Receive(ctx)
if err != nil {
if errors.Is(err, sdk.ErrQueueEmpty) {
return nil
}
return err
}
if err := consumer.AckJob(ctx, job); err != nil {
return err
}
SDK Python
Instalação:
pip install procedere-mq-sdk==0.3.0
Como criar um Producer:
- Crie o cliente com
LiteMQClient(base_url) - Crie o producer com
client.producer("nome-da-fila") - Publique mensagens com
producer.publish(...)
from python_sdk import LiteMQClient
client = LiteMQClient("http://127.0.0.1:65090", username="api-user", password="senha-forte-api")
producer = client.producer("emails")
job = producer.publish(
{"to": "alice@example.com", "template": "welcome"},
max_retry=3,
)
print("job criado:", job["id"])
Como criar um Consumer:
- Crie o client com
LiteMQClient(base_url) - Crie o consumer com
client.consumer("nome-da-fila") - Receba jobs com
consumer.receive() - Finalize com
consumer.ack(job)ouconsumer.fail(job)
from python_sdk import LiteMQClient, QueueEmptyError
client = LiteMQClient("http://127.0.0.1:65090", username="api-user", password="senha-forte-api")
consumer = client.consumer("emails")
try:
job = consumer.receive()
consumer.ack(job)
except QueueEmptyError:
pass
SDK Node.js
Instalacao:
npm install procedere-mq-sdk
Como criar um Producer:
- Crie o cliente com
new LiteMQClient(baseUrl) - Crie o producer com
client.producer("nome-da-fila") - Publique mensagens com
producer.publish(...)
const { LiteMQClient } = require("procedere-mq-sdk");
const client = new LiteMQClient("http://127.0.0.1:65090", {
username: "api-user",
password: "senha-forte-api",
});
const producer = client.producer("emails");
const job = await producer.publish(
{ to: "alice@example.com", template: "welcome" },
{ maxRetry: 3 }
);
console.log("job criado:", job.id);
Como criar um Consumer:
- Crie o client com
new LiteMQClient(baseUrl) - Crie o consumer com
client.consumer("nome-da-fila") - Receba jobs com
consumer.receive() - Finalize com
consumer.ack(job)ouconsumer.fail(job)
const { LiteMQClient, QueueEmptyError } = require("procedere-mq-sdk");
const client = new LiteMQClient("http://127.0.0.1:65090", {
username: "api-user",
password: "senha-forte-api",
});
const consumer = client.consumer("emails");
try {
const job = await consumer.receive();
await consumer.ack(job);
} catch (error) {
if (error instanceof QueueEmptyError) {
// fila vazia
} else {
throw error;
}
}
Publicação
Go SDK
make publish-go-sdk VERSION=0.3.0
Python SDK (PyPI)
make check-python-sdk
make publish-python-sdk TWINE_REPOSITORY=pypi
Node.js SDK (npm)
make check-node-sdk
make publish-node-sdk
Release De Producao
O projeto agora tem um script unico para publicar:
- imagem Docker em
jebob28/procederemq - SDK Go por tag git
- SDK Python no PyPI
- SDK Node.js no npm
Antes de rodar, deixe o worktree limpo e exporte os tokens no ambiente:
export NPM_TOKEN='seu-token-npm'
export PYPI_TOKEN='seu-token-pypi'
Depois execute:
make release-prod VERSION=0.3.0
O script:
- sincroniza versao em
pyproject.toml,node_sdk/package.json,README.mde testes automatizados - roda testes Go, Python e Node
- cria commit
release: vX.Y.Z - cria e envia a tag git
vX.Y.Z - publica PyPI, npm e Docker
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file procedere_mq_sdk-0.3.0.tar.gz.
File metadata
- Download URL: procedere_mq_sdk-0.3.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76da52a980fd87800d89e8b523236048088b4e04f8fa0ef6612de0b85d778abb
|
|
| MD5 |
3f02c37304113a18ad5ed69a3e10aa1a
|
|
| BLAKE2b-256 |
245c7314522739704aef33baddfaa2501752f71f076ae307d57cab62f0bd6ba2
|
File details
Details for the file procedere_mq_sdk-0.3.0-py3-none-any.whl.
File metadata
- Download URL: procedere_mq_sdk-0.3.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db54194250824981a1c13821e745e22b13ea3cb152a1e0e2be22eb43fdb933b9
|
|
| MD5 |
6e058effd1b560545d972d10ca687678
|
|
| BLAKE2b-256 |
8dd8b00f90534739d7622d5bca39a6dcf1ab23c3a32fd77040df9e373fae7978
|