Skip to main content

Channel BasicProperties | RabbitMQ | CSharp

  • Channel BasicProperties | RabbitMQ | CSharp

O que _channel.CreateBasicProperties() faz?

Ele cria um objeto de propriedades da mensagem (IBasicProperties), que permite configurar metadados da mensagem antes de publicar no RabbitMQ.

Sem isso:

  • A mensagem é publicada “crua”
  • Sem persistência
  • Sem headers
  • Sem TTL
  • Sem correlação
  • Sem prioridade

🔧 Exemplo básico

var props = _channel.CreateBasicProperties();
props.Persistent = true;

_channel.BasicPublish(
exchange: "",
routingKey: "minha_fila",
basicProperties: props,
body: body
);

➡️ Isso torna a mensagem persistente (salva em disco se a fila for durable).


🧠 O que você pode configurar nele?

1️⃣ Persistência (mais comum)

props.Persistent = true;

✔️ Garante que a mensagem sobreviva a restart do RabbitMQ ⚠️ A fila também precisa ser durable = true


2️⃣ Headers (metadados customizados)

props.Headers = new Dictionary<string, object>
{
["origem"] = "worker-noturno",
["tentativa"] = 1
};

✔️ Usado para:

  • Retry
  • Roteamento
  • Auditoria
  • Feature flags

3️⃣ TTL (expiração da mensagem)

props.Expiration = "60000"; // 60s em milissegundos

✔️ Mensagem expira se não for consumida ✔️ Muito usado com DLQ


4️⃣ CorrelationId (rastreamento)

props.CorrelationId = Guid.NewGuid().ToString();

✔️ Útil para:

  • Request/Response
  • Tracing
  • Logs distribuídos

5️⃣ MessageId

props.MessageId = Guid.NewGuid().ToString();

✔️ Identificador único da mensagem


6️⃣ ContentType / Encoding

props.ContentType = "application/json";
props.ContentEncoding = "utf-8";

7️⃣ Priority (se a fila suportar)

props.Priority = 5;

⚠️ A fila precisa ser criada com:

arguments: new Dictionary<string, object>
{
["x-max-priority"] = 10
}

8️⃣ ReplyTo (RPC)

props.ReplyTo = "reply_queue";

🔴 O que ele NÃO faz

❌ Não cria fila ❌ Não cria exchange ❌ Não garante entrega sozinho ❌ Não faz retry ❌ Não faz batching

Ele só descreve a mensagem.


🔥 Exemplo completo (produção)

var props = _channel.CreateBasicProperties();
props.Persistent = true;
props.ContentType = "application/json";
props.MessageId = Guid.NewGuid().ToString();
props.CorrelationId = correlationId;
props.Headers = new Dictionary<string, object>
{
["source"] = "api",
["retry"] = 0
};

_channel.BasicPublish(
exchange: "empresa-ex",
routingKey: "desconexao",
mandatory: true,
basicProperties: props,
body: body
);

✅ Quando usar CreateBasicProperties?

CenárioUsar?
Mensagem simples/testeOpcional
Produção✅ Sempre
Retry/DLQ✅ Obrigatório
Auditoria
Rastreamento

🧠 Regra de ouro

Mensagem sem propriedades = mensagem sem controle