O ApsaraMQ for RocketMQ entrega mensagens aos consumidores em um de dois modos: consumo por cluster (cada mensagem vai para um consumidor no grupo) ou consumo por broadcast (cada mensagem vai para todos os consumidores no grupo). O modo padrão é o consumo por cluster.
Escolha um modo de consumo
Vários consumidores identificados pelo mesmo group ID formam um grupo de consumidores. Os consumidores no mesmo grupo devem usar a mesma lógica de consumo, assinar os mesmos tópicos e tags e utilizar o mesmo modo de consumo. Para mais informações, consulte Consistência de assinatura.
Escolha o modo adequado à forma como os consumidores de um grupo devem receber mensagens:
|
Objetivo |
Modo |
Funcionamento |
|
Distribuir mensagens entre consumidores para processamento paralelo |
Consumo por cluster |
Cada mensagem é entregue a exatamente um consumidor no grupo. Os consumidores compartilham a carga de trabalho. |
|
Entregar cada mensagem a todos os consumidores |
Consumo por broadcast |
Cada mensagem é entregue a todos os consumidores no grupo. Cada consumidor processa o fluxo completo de mensagens. |
Se você não definir explicitamente um modo de consumo, o sistema usará o consumo por cluster.
Consumo por cluster
No modo de consumo por cluster, o ApsaraMQ for RocketMQ distribui as mensagens de um tópico entre os consumidores de um grupo. Apenas um consumidor consome cada mensagem.

Casos de uso
Balanceamento de carga para processamento de alto throughput: Distribua um grande volume de mensagens entre vários consumidores para que cada um processe um subconjunto. Adicionar mais consumidores aumenta o throughput.
Processamento distribuído de dados: Divida o trabalho entre vários nós para que cada nó processe uma parte dos dados independentemente.
Observações de uso
Uma mensagem com falha não é necessariamente reentregue ao mesmo consumidor. Após um rebalanceamento, a mensagem pode ir para outro consumidor no grupo.
Os brokers do ApsaraMQ for RocketMQ armazenam o progresso do consumidor (offsets). Se um consumidor reiniciar, ele retomará a partir do último offset confirmado, garantindo que nenhuma mensagem seja ignorada.
Há suporte para nova tentativa de mensagem. Se um consumidor falhar ao processar uma mensagem, o broker a reentregará automaticamente. Para detalhes, consulte Nova tentativa de mensagem.
Consumo por broadcast
No modo de consumo por broadcast, o ApsaraMQ for RocketMQ entrega cada mensagem a todos os consumidores do grupo. Cada consumidor processa cada mensagem pelo menos uma vez. Esse modo é adequado para cenários em que vários consumidores processam simultaneamente o mesmo grupo de mensagens, como no processamento de pedidos.

Casos de uso
Notificações e comunicados: Envie uma atualização para todos os assinantes para que cada consumidor atue sobre ela.
Sincronização de dados em tempo real: Propague alterações de dados para todos os nós em um sistema distribuído para manter caches locais ou estados consistentes.
Observações de uso
Sem nova tentativa automática: O broker não reentrega mensagens cujo processamento falhou. Trate as falhas de consumo na lógica da sua aplicação.
Comportamento de reinicialização: Ao reiniciar, o consumidor começa a consumir a partir da mensagem mais recente. As mensagens publicadas enquanto o consumidor estava offline são ignoradas.
Maior uso de recursos: Como cada consumidor processa todas as mensagens, o consumo de recursos se multiplica. Utilize o consumo por cluster, a menos que seu caso de uso exija especificamente a entrega fan-out.
Comparação de recursos
O consumo por broadcast troca a riqueza de recursos pela entrega fan-out. A tabela a seguir lista o que cada modo suporta.
|
Recurso |
Consumo por cluster |
Consumo por broadcast |
|
SDKs cliente TCP |
Suportado |
Suportado |
|
SDKs cliente HTTP |
Suportado |
Não suportado |
|
Mensagens ordenadas |
Suportado |
Não suportado |
|
Redefinição de offset do consumidor |
Suportado |
Não suportado |
|
Nova tentativa de mensagem |
Suportado |
Não suportado |
|
Consulta e alerta de mensagens acumuladas |
Suportado |
Não suportado |
|
Consulta de assinatura |
Suportado |
Não suportado |
No modo de consumo por broadcast, o broker não tenta reenviar mensagens com falha, não rastreia o progresso do consumo nem oferece suporte à redefinição de offset. Projete seu consumidor para lidar com essas questões no nível da aplicação.
Rastreamento do progresso do consumidor
A forma de rastrear o progresso do consumidor difere entre os dois modos:
|
Aspecto |
Consumo por cluster |
Consumo por broadcast |
|
Armazenado em |
Broker do ApsaraMQ for RocketMQ |
Cliente |
|
Após reinicialização |
Retoma a partir do último offset confirmado |
Inicia a partir da mensagem mais recente |
|
Confiabilidade |
Maior — offsets gerenciados pelo broker sobrevivem a falhas do cliente |
Menor — offsets gerenciados pelo cliente são perdidos na reinicialização; a probabilidade de consumo repetido é maior |
|
Nova tentativa de mensagem |
O broker reentrega automaticamente mensagens com falha |
Sem nova tentativa automática; trate as falhas no seu código |
Configure o modo de consumo
Defina o parâmetro MessageModel no código do SDK do seu consumidor. Se você não definir esse parâmetro, o sistema usará o consumo por cluster por padrão.
SDKs cliente TCP
Todos os exemplos de SDKs cliente TCP definem a propriedade MessageModel na configuração do consumidor.
Java
-
Consumo por cluster
// Clustering consumption is the default. This explicit setting is optional. properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING); -
Consumo por broadcast
properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
C/C++
-
Consumo por cluster
// Clustering consumption is the default. This explicit setting is optional. factoryInfo.setFactoryProperty(ONSFactoryProperty::MessageModel, ONSFactoryProperty::CLUSTERING); -
Consumo por broadcast
factoryInfo.setFactoryProperty(ONSFactoryProperty::MessageModel, ONSFactoryProperty::BROADCASTING);
.NET
-
Consumo por cluster
// Clustering consumption is the default. This explicit setting is optional. factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.CLUSTERING); -
Consumo por broadcast
factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.BROADCASTING);
SDKs cliente HTTP
Os SDKs cliente HTTP suportam apenas o consumo por cluster. Nenhuma configuração é necessária.
FAQ
Por que o consumo por broadcast não entra em vigor após eu configurá-lo?
Isso ocorre quando o tipo de mensagem ou o SDK não suporta broadcast:
Mensagens ordenadas: Mensagens ordenadas suportam apenas consumo por cluster. A configuração
MessageModelé ignorada.SDK cliente HTTP: Clientes HTTP suportam apenas consumo por cluster. Para usar o consumo por broadcast, mude para um SDK cliente TCP.
Posso misturar modos de consumo dentro de um grupo?
Não. Todos os consumidores em um grupo devem usar o mesmo modo de consumo.
Se os consumidores no mesmo grupo tiverem configurações MessageModel diferentes, o consumo por broadcast entrará em vigor para todos os consumidores do grupo. Por exemplo, em um grupo de cinco consumidores onde dois estão definidos como CLUSTERING e três estão definidos como BROADCASTING, todos os cinco usarão o consumo por broadcast.
Próximos passos
Consistência de assinatura: Regras para manter as configurações de assinatura consistentes entre os consumidores de um grupo.
Nova tentativa de mensagem: Como o broker lida com falhas na entrega de mensagens no modo de consumo por cluster.
Código de exemplo: Exemplos completos de mensagens para o ApsaraMQ for RocketMQ.