
Security News
Astral Launches pyx: A Python-Native Package Registry
Astral unveils pyx, a Python-native package registry in beta, designed to speed installs, enhance security, and integrate deeply with uv.
Python Rabbit wrapper library to simplify to use Exchanges and Queues with decorators
Este documento descreve a biblioteca HIJIKI versão 2, que é uma evolução da versão 1, mantendo compatibilidade com o código existente. A versão 2 introduz melhorias significativas na estrutura e funcionalidade, mas não altera a API pública, garantindo que os usuários possam migrar facilmente sem necessidade de ajustes no código já implementado. para acesso a versão 1, consulte a documentação da versão 1 e para fontes a tag v1_latest
HIJIKI é uma biblioteca Python de alto nível para gerenciamento de mensagens orientada a eventos, destinada a facilitar a criação, configuração e uso de consumidores e produtores de mensagens, principalmente utilizando RabbitMQ como broker. Seu objetivo é abstrair detalhes de implementação de fila e troca de mensagens, oferecendo uma interface intuitiva, flexível e adequada tanto para aplicações web quanto scripts standalone.
Principais Características:
MessageManagerBuilder
), facilitando setup e customizações complexas.is_alive
), troca dinâmica do broker, e registro em execução.Principais Classes:
MessageManagerBuilder
: Classe principal para construir e configurar a stack.MessageManager
: Gerencia operações de envio e consumo de mensagens.ConsumerData
: Estrutura que associa uma fila, tópico e função handler.Clone este repositório e instale as dependências:
git clone https://github.com/asengardeon/hijiki.git
cd hijiki
pipenv install
A seguir, um resumo técnico dos principais métodos empregados para utilizar a biblioteca HIJIKI na prática:
A configuração é feita via padrão builder, permitindo customização das conexões e parâmetros:
manager = (
MessageManagerBuilder()
.with_host("localhost")
.with_port(5672)
.with_user("user")
.with_password("pwd")
# outras opções, como troca do broker, etc.
.build()
)
amqps
em vez do amqp
, que é usado por padrãoÉ preciso criar uma instância de ConsumerData
associando uma fila, tópico e função de processamento.
Além dessas informações obrigatórias, o ConsumerData
permite a customização de outros tipos de parâmetros. Por exemplo, caso você precise consumir filas e exchanges de uma instância que não esteja utilizando os parâmetros padrões usados por esta lib, como os tipos das filas e exchanges, é possível passar os tipos por meio dos parâmetros queue_type
e exchange_type
durante a instanciação da ConsumerData
.
O método create_consumer adiciona consumidores ao manager:
def process_message(msg):
print(f"Mensagem recebida: {msg}")
consumer_data = ConsumerData("nome_da_fila", "nome_do_topico", process_message)
manager.create_consumer(consumer_data)
##Criando consumidor com decorator
Você também pode usar o decorator @consumer_handler
para registrar consumidores de forma mais simples:
@consumer_handler(queue_name="teste1")
def internal_consumer(data):
print(f"consumiu o valor:{data}")
result_data_list.append(data)
result_event_list.append('received event')
@consumer_handler(queue_name="teste1_dlq", create_dlq=False)
def internal_consumer_dlq(data):
print(f"consumiu o valor:{data}")
result_event_list_dlq.append('received event')
@consumer_handler(queue_name="fila_erro", topic="erro_event")
def internal_consumer_erro(data):
print(f"consumiu o valor:{data}")
result_event_list.append('received event')
raise Exception("falhou")
@consumer_handler(queue_name="teste_with_specific_routing_key", topic='teste1_event',
routing_key="specific_routing_key")
def internal_consumer(data):
print(f"consumiu o valor:{data}")
result_data_list.append(data)
result_data_list_dlq_for_specific_routing_key.append('received event')
O método start_consuming inicia loops de consumo das filas para todos consumidores registrados:
manager.start_consuming()
O método publish envia mensagens diretamente para a fila/ tópico definido:
manager.publish("nome_da_fila", "Conteúdo da mensagem")
Por padrão, a publicação das mensagens é feita seguindo o formato { "value": <conteúdo da mensagem> }
, para filas do tipo topic
, sem routing_key
e parâmetro reply_to
. Todos estes podem ser customizados se seu caso de uso não se adequar a isso:
def custom_message_mapper(_topic: str, data: str):
return { "id": uuid(), "data": data }
manager.publish(
"nome_da_fila",
"Conteúdo da mensagem",
message_mapper=custom_message_mapper
routing_key="my_routing_key",
reply_to="my_response_queue_name"
)
localhost:5672
) ou disponível remotamente.pipenv install
(na raiz do projeto)pika
, fastapi
, uvicorn
, entre outras já incluídas no Pipfile
do projeto.fastapi_example.py
Demonstra como criar endpoints FastAPI para publicar mensagens e inicializar consumidores utilizando HIJIKI.
pure_python_example.py
Demonstra como publicar e consumir mensagens programaticamente, usando apenas Python puro, sem framework web.
Suba o RabbitMQ em sua máquina local (padrão: usuário user
, senha pwd
, porta 5672
)
Se usar outro usuário/senha/host, edite o exemplo conforme necessário.
Execute o servidor FastAPI:
uvicorn examples.fastapi_example:app --reload
Interaja com a API:
curl -X POST "http://localhost:8000/publish/fastapi_queue" -H "accept: application/json" -d "message=Olá do FastAPI"
Suba o RabbitMQ em sua máquina local (localhost:5672
).
Execute o script:
python examples/pure_python_example.py
Verifique a saída:
python_queue
.Ctrl+C
para interromper o consumo.ConsumerData
e passar para manager.create_consumer()
.ConsumerData
, que associam fila, tópico e função de processamento.manager.start_consuming()
inicia o consumo registrado para as filas configuradas.Abra uma issue no repositório principal do projeto, ou envie sugestões/contribuições!
FAQs
Python Rabbit wrapper library to simplify to use Exchanges and Queues with decorators
We found that hijiki demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Astral unveils pyx, a Python-native package registry in beta, designed to speed installs, enhance security, and integrate deeply with uv.
Security News
The Latio podcast explores how static and runtime reachability help teams prioritize exploitable vulnerabilities and streamline AppSec workflows.
Security News
The latest Opengrep releases add Apex scanning, precision rule tuning, and performance gains for open source static code analysis.