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

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.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) 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.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.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.0.tar.gz (5.1 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.0-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

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

Hashes for procedere_mq_sdk-0.3.0.tar.gz
Algorithm Hash digest
SHA256 76da52a980fd87800d89e8b523236048088b4e04f8fa0ef6612de0b85d778abb
MD5 3f02c37304113a18ad5ed69a3e10aa1a
BLAKE2b-256 245c7314522739704aef33baddfaa2501752f71f076ae307d57cab62f0bd6ba2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for procedere_mq_sdk-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db54194250824981a1c13821e745e22b13ea3cb152a1e0e2be22eb43fdb933b9
MD5 6e058effd1b560545d972d10ca687678
BLAKE2b-256 8dd8b00f90534739d7622d5bca39a6dcf1ab23c3a32fd77040df9e373fae7978

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