Todos os produtos
Search
Central de documentação

ApsaraMQ for RabbitMQ:Exchanges

Última atualização: Jun 28, 2026

Um exchange recebe mensagens dos produtores e as encaminha para uma ou mais filas. Em vez de enviar mensagens diretamente às filas, os produtores sempre publicam em um exchange, que define o destino de cada mensagem com base nas regras de roteamento.

Como funciona o roteamento de mensagens

Uma mensagem percorre o ApsaraMQ for RabbitMQ em quatro etapas:

  1. O produtor publica uma mensagem em um exchange.

  2. O exchange avalia a mensagem conforme suas regras de roteamento.

  3. Com base nos bindings entre o exchange e as filas, o exchange encaminha a mensagem para uma ou mais filas correspondentes.

  4. Cada fila armazena a mensagem até que um consumidor a recupere e processe.

Dois conceitos são fundamentais nesse processo de roteamento:

  • Binding: Vínculo entre um exchange e uma fila. Cada binding pode incluir uma chave de roteamento ou argumentos de cabeçalho usados pelo exchange para filtrar mensagens.

  • Chave de roteamento: Atributo do tipo string associado a cada mensagem. Os exchanges comparam essa chave com as chaves de binding das filas vinculadas para determinar o destino da mensagem.

Tipos de exchange

O ApsaraMQ for RabbitMQ oferece suporte a seis tipos de exchange, cada um com uma estratégia de roteamento diferente.

Tipo de exchange

Estratégia de roteamento

Caso de uso típico

Direct

Correspondência exata da chave de roteamento

Encaminhar uma mensagem para uma fila específica

Topic

Correspondência da chave de roteamento com curingas

Encaminhar mensagens para filas por categoria ou padrão

Fanout

Transmissão para todas as filas vinculadas

Enviar a mesma mensagem para todos os consumidores

Headers

Correspondência de atributos de cabeçalho

Roteamento por múltiplos campos de metadados em vez de chave de roteamento

x-delayed-message

Entrega atrasada + roteamento configurável

Entregar mensagens após um atraso especificado

x-consistent-hash

Hash consistente da chave de roteamento ou cabeçalho

Distribuir mensagens entre filas por peso

Exchanges Direct

Um exchange direct encaminha a mensagem para a fila cuja chave de binding corresponde exatamente à chave de roteamento da mensagem.

Quando usar um exchange direct:

  • Distribuição de tarefas em que cada tipo mapeia para uma fila de processamento dedicada

  • Roteamento de logs em que cada nível (erro, aviso, informação) vai para uma fila separada

  • Cenários que exigem entrega unicast baseada em um identificador de string simples

Exemplo de roteamento

direct_exchange

Mensagem

Chave de roteamento

Chave de binding

Fila de destino

Mensagem A

img.create

img.create

Fila A

Mensagem B

img.log

img.log

Fila B

A Mensagem A possui a chave de roteamento img.create. O exchange identifica que a Fila A está vinculada com a mesma chave e, portanto, encaminha a Mensagem A para a Fila A. A Mensagem B segue a mesma lógica: sua chave de roteamento img.log corresponde à chave de binding da Fila B.

Exchanges Topic

Um exchange topic encaminha mensagens para filas cujas chaves de binding correspondem à chave de roteamento da mensagem por meio de padrões com curingas. As chaves de roteamento e de binding são strings delimitadas por pontos (por exemplo, files.cn.hz), e as chaves de binding podem incluir dois curingas:

  • * (asterisco): corresponde exatamente a um segmento. Por exemplo, files.cn.*.store corresponde a files.cn.hz.store e files.cn.sz.store, mas não corresponde a files.cn.store (segmento ausente) ou files.cn.hz.sz.store (segmento extra).

  • # (hash): corresponde a zero ou mais segmentos. Por exemplo, files.cn.hz.# corresponde a files.cn.hz, files.cn.hz.store e files.cn.hz.store.backup.

Uma chave de binding composta apenas por # corresponde a qualquer chave de roteamento, fazendo o exchange topic se comportar como um exchange fanout.

Quando usar um exchange topic:

  • Distribuição de dados por localização geográfica, como rotear eventos de vendas regionais para consumidores específicos de cada região

  • Processamento de tarefas em segundo plano em que vários workers lidam com subconjuntos específicos de tarefas

  • Feeds de notícias ou eventos em que os consumidores se inscrevem em mensagens por categoria ou tag

  • Cenários que exigem entrega seletiva de mensagens multicast

Exemplo de roteamento

topic_exchange

Mensagem

Chave de roteamento

Chave de binding correspondente

Fila de destino

Mensagem A

files.cn.hz

files.cn.hz.#

Fila A

Mensagem B

files.cn.hz.store

files.cn.hz.#, files.cn.*.store

Fila A, Fila B

Mensagem C

files.cn.sz.store

files.cn.*.store

Fila B

  • Mensagem A (files.cn.hz): O curinga # em files.cn.hz.# corresponde a zero segmentos finais; assim, a Mensagem A vai para a Fila A. Ela não corresponde a files.cn.*.store porque não existe um quarto segmento.

  • Mensagem B (files.cn.hz.store): Corresponde a files.cn.hz.# (um segmento final) e a files.cn.*.store (* corresponde a hz); portanto, vai tanto para a Fila A quanto para a Fila B.

  • Mensagem C (files.cn.sz.store): Corresponde a files.cn.*.store (* corresponde a sz), mas não a files.cn.hz.# (o terceiro segmento sz difere de hz); logo, vai apenas para a Fila B.

Exchanges Fanout

Um exchange fanout encaminha todas as mensagens para todas as filas vinculadas, independentemente das chaves de roteamento. O exchange ignora completamente a chave de roteamento.

Quando usar um exchange fanout:

  • Transmitir atualizações de configuração ou status para todos os serviços do sistema

  • Enviar atualizações de placar em tempo real para todos os clientes móveis conectados

  • Distribuir mensagens para todos os participantes de um chat em grupo

  • Cenários que exigem entrega broadcast

Exemplo de roteamento

fanout_exchange

Mensagem

Chave de roteamento

Fila de destino

Mensagem A

img.create

Fila A, Fila B

Mensagem B

queue.msgMap

Fila A, Fila B

Mensagem C

cn.hz.topic.alarm

Fila A, Fila B

As três mensagens possuem chaves de roteamento diferentes, mas o exchange fanout entrega cada mensagem tanto para a Fila A quanto para a Fila B. As chaves de roteamento não têm efeito.

Exchanges Headers

Um exchange headers encaminha mensagens com base em atributos de cabeçalho em vez de chaves de roteamento. Funciona como um exchange direct mais flexível: em vez de corresponder a uma única string de chave de roteamento, compara múltiplos pares chave-valor nos cabeçalhos da mensagem.

Como funciona a correspondência

Ao vincular uma fila a um exchange headers, defina um conjunto de pares chave-valor como argumentos de binding. Quando um produtor publica uma mensagem, ele configura pares chave-valor nos cabeçalhos da mensagem. O exchange compara os cabeçalhos da mensagem com os argumentos de binding de cada fila para decidir o destino.

Um argumento de binding especial, x-match, controla a estratégia de correspondência:

Valor de x-match

Comportamento

all

A mensagem deve corresponder a todos os argumentos de binding (exceto o próprio x-match). Trata-se de um AND lógico.

any

A mensagem deve corresponder a pelo menos um argumento de binding (exceto o próprio x-match). Trata-se de um OR lógico.

Um cabeçalho corresponde a um argumento de binding quando uma das seguintes condições é verdadeira:

  • A chave e o valor do cabeçalho são idênticos à chave e ao valor do argumento de binding.

  • A chave do cabeçalho corresponde à chave do argumento de binding, e o valor do argumento de binding está vazio.

Quando usar um exchange headers:

  • Rotear mensagens por múltiplas dimensões de metadados (por exemplo, tipo de conteúdo, prioridade e origem)

  • Distribuir conteúdo categorizado ou tagueado, como artigos de notícias filtrados por tópico e formato

  • Cenários em que o roteamento baseado em uma única chave de string é muito limitante

Exemplo de roteamento

headers_exchange

Configuração de binding:

Fila

Argumentos de binding

Fila A

type=read, resource=group, x-match=all

Fila B

type=read, resource=topic, x-match=any

Resultados do roteamento:

Mensagem

Cabeçalhos da mensagem

Fila de destino

Motivo

Mensagem A

type=read, resource=group

Fila A, Fila B

Corresponde a todos os argumentos da Fila A (type=read E resource=group). Corresponde a pelo menos um dos argumentos da Fila B (type=read).

Mensagem B

type=read

Fila B

Não corresponde à Fila A porque resource=group está ausente (x-match=all exige todos os argumentos). Corresponde à Fila B porque type=read satisfaz x-match=any.

Mensagem C

type=write, resource=topic

Fila B

Não corresponde à Fila A porque type=write difere de type=read. Corresponde à Fila B porque resource=topic satisfaz x-match=any.

Exchanges x-delayed-message

O ApsaraMQ for RabbitMQ é compatível com exchanges x-delayed-message fornecidos pelo RabbitMQ open-source. Enquanto o RabbitMQ open-source exige um plug-in para usar exchanges x-delayed-message, o ApsaraMQ for RabbitMQ não requer instalação de plug-ins.

Um exchange x-delayed-message retém uma mensagem por uma duração especificada antes de entregá-la a uma fila. Defina o cabeçalho x-delay (em milissegundos) em cada mensagem para controlar o atraso.

O exchange usa o argumento x-delayed-type (especificado no momento da declaração) para determinar seu comportamento de roteamento. Os seguintes tipos de exchange são suportados como valores de x-delayed-type:

  • Direct

  • Topic

  • Fanout

  • Headers

Por exemplo, um exchange x-delayed-message com x-delayed-type=direct encaminha mensagens por correspondência exata da chave de roteamento — mas somente após o término do período de atraso.

Para mais informações, consulte Mensagens atrasadas.

Exemplo de roteamento

O exemplo a seguir mostra um exchange x-delayed-message com x-delayed-type definido como direct.

x-delayed-message-exchange

Mensagem

x-delay

Chave de roteamento

Chave de binding

Fila de destino

Mensagem A

3000

img.create

img.create

Fila A

Mensagem B

4000

img.log

img.log

Fila B

  • Mensagem A: O exchange recebe a Mensagem A e aguarda 3.000 milissegundos (3 segundos) antes de entregá-la à Fila A.

  • Mensagem B: O exchange recebe a Mensagem B e aguarda 4.000 milissegundos (4 segundos) antes de entregá-la à Fila B.

Exchanges x-consistent-hash

O ApsaraMQ for RabbitMQ é compatível com exchanges x-consistent-hash fornecidos pelo RabbitMQ open-source. Enquanto o RabbitMQ open-source exige um plug-in para usar exchanges x-consistent-hash, o ApsaraMQ for RabbitMQ não requer instalação de plug-ins.

Um exchange x-consistent-hash usa hash consistente para distribuir mensagens entre as filas vinculadas. Ele calcula um hash a partir da chave de roteamento da mensagem ou de um valor de cabeçalho especificado e mapeia esse hash para uma fila. Mensagens com a mesma chave de roteamento (ou valor de cabeçalho) sempre vão para a mesma fila.

Nota

Os exchanges x-consistent-hash não oferecem suporte a roteamento baseado em ID de mensagem, ID de correlação ou timestamp.

Regras de roteamento

  • Origem do hash: Por padrão, o exchange aplica hash na chave de roteamento. Para aplicar hash em um valor de cabeçalho, declare o exchange com o parâmetro hash-header e especifique o nome do cabeçalho. Os produtores devem incluir esse cabeçalho em suas mensagens. Se o cabeçalho especificado estiver ausente, todas as mensagens serão encaminhadas para a mesma fila aleatória.

  • Prioridade: Se tanto uma chave de roteamento quanto hash-header estiverem presentes, o exchange usa o valor de hash-header.

  • Peso da fila: Ao vincular uma fila, defina a chave de binding como um número inteiro de 1 a 20. Esse valor representa o peso da fila — um peso maior significa que a fila recebe uma parcela maior de mensagens. Valores acima de 20 são tratados como 20.

  • Restrições de binding: Se existirem múltiplos bindings para uma fila, apenas o primeiro binding com um valor inteiro positivo entra em vigor. Exclua o binding existente antes de alterar o peso de uma fila.

Quando usar um exchange x-consistent-hash:

  • Distribuir carga de trabalho entre múltiplas filas de consumidores com pesos configuráveis

Exemplo de roteamento

O exemplo a seguir mostra um exchange x-consistent-hash que roteia pela chave de roteamento.

x-consistent-hash

Mensagens:

Mensagem

Chave de roteamento

Mensagem A

cn.hz.1

Mensagem B

cn.hz.2

Mensagem C

cn.hz.3

Bindings de fila:

Fila

Chave de binding (peso)

Fila A

1

Fila B

2

O exchange aplica hash na chave de roteamento de cada mensagem e a mapeia para uma fila. A Fila A tem peso 1 e a Fila B tem peso 2; portanto, aproximadamente um terço das mensagens vai para a Fila A e dois terços vão para a Fila B.