Skip to main content

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 Auth com username/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=true for definido para desenvolvimento isolado
  • O dashboard /ui usa login e senha com sessao por cookie quando UI_USERNAME e UI_PASSWORD ou UI_PASSWORD_HASH estao configurados
  • Para producao, prefira UI_PASSWORD_HASH com bcrypt no lugar de senha em texto puro
  • O WebSocket /ws e as rotas usadas pelo dashboard aceitam a sessao do UI; SDKs e acesso programatico usam username/password diretamente
  • 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-compose publica portas apenas em 127.0.0.1

Funcionalidades Avançadas

  • Visibility Timeout: Jobs em processamento que não recebem ACK/FAIL voltam para a fila automaticamente após um tempo limite (padrão 5 min).
  • DLQ Redrive: Mova todos os jobs de uma Fila de Erros (.dlq) de volta para a fila original com um clique no Dashboard ou via API.
  • Delayed Jobs: Agende a execução de tarefas para o futuro usando o campo run_at.
  • Dead Letter Queues (DLQ): Jobs que falham após o número máximo de tentativas são movidos automaticamente para <queue>.dlq.

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) ou consumer.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.1

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) ou consumer.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) ou consumer.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.1

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.1

O script:

  • sincroniza versao em pyproject.toml, node_sdk/package.json, README.md e 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

procedere_mq_sdk-0.3.1.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

procedere_mq_sdk-0.3.1-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file procedere_mq_sdk-0.3.1.tar.gz.

File metadata

  • Download URL: procedere_mq_sdk-0.3.1.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for procedere_mq_sdk-0.3.1.tar.gz
Algorithm Hash digest
SHA256 38a7a5eb3ecd80ba898c97031f78e89918df4533a044d13b39f84dbc2ec2b072
MD5 f2dfd54af9fac558fec062eab78fd021
BLAKE2b-256 3b088dbfc83776400f7e1470b91e8c5f3ab9d95c58bc8f3741237838d7e14802

See more details on using hashes here.

File details

Details for the file procedere_mq_sdk-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for procedere_mq_sdk-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 19812aa06af169bbefbd99bb0029b9c17b8e45334d655921940f282e193fe88e
MD5 784ff53424e2097bb8aabd773c6abdf0
BLAKE2b-256 3ce119b61ef0d34017b221d647fa4c1deff3035a7c266d022334a7d5f76c7fa8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page