Como lidar com valores de chave de roteamento de vinculação desconhecida / inválida no RabbitMQ?

Fred

Gostaria de saber qual é a melhor maneira de lidar com mensagens com valores de chave de roteamento desconhecidos / inválidos dentro de uma troca? No meu caso, estou enviando todas as minhas mensagens dentro da mesma central e com base em uma chave de roteamento, as mensagens são encaminhadas para a fila correspondente. Esta é minha configuração (estou usando Spring Cloud Stream):

spring.cloud.stream.bindings.output.destination: my-exchange
spring.cloud.stream.bindings.output.producer.routingKeyExpression: payload.type

spring.cloud.stream.bindings.input-type1.destination: my-exchange # Exchange
spring.cloud.stream.bindings.input-type1.group: input.type1 # Queue 1
spring.cloud.stream.bindings.input-type2.destination: my-exchange # Exchange
spring.cloud.stream.bindings.input-type2.group: input.type2 # Queue 2

spring.cloud.stream.rabbit.bindings.input-type1.consumer.bindingRoutingKey: FOO
spring.cloud.stream.rabbit.bindings.input-type2.consumer.bindingRoutingKey: BAR

Agora o que estou perguntando é o que acontece se eu enviar uma mensagem com payload.type='ANY'? Obviamente, essa mensagem não será recuperada por nenhum consumidor e ficará dentro da central, mas qual a melhor forma de rastrear essas mensagens "desconhecidas"? Posso usar um DLQ para isso?

Obrigado!

Gary Russell

permanecerá dentro da bolsa,

Não; as trocas não "retêm" mensagens, são simplesmente roteadores.

Mensagens que não podem ser roteadas são descartadas por padrão.

Você pode configurar a ligação para retornar mensagens que não podem ser roteadas.

Consulte Canais de erro .

Os retornos são assíncronos.

Na próxima versão 3.1, você pode esperar em um futuro para determinar se a mensagem foi enviada com sucesso ou não. Consulte as confirmações do editor .

Se a mensagem não puder ser roteada, a returnedMessagepropriedade dos dados de correlação será definida.

A estrutura usa o mandatoryrecurso mencionado em outra resposta.

EDITAR

Aqui está um exemplo:

spring.rabbitmq.publisher-returns: true

spring.cloud.stream.bindings.output.destination: my-exchange
spring.cloud.stream.rabbit.bindings.output.producer.routing-key-expression: headers['rk']

spring.cloud.stream.bindings.output.producer.error-channel-enabled: true
@SpringBootApplication
@EnableBinding(Source.class)
public class So65134452Application {

    public static void main(String[] args) {
        SpringApplication.run(So65134452Application.class, args);
    }

    @Bean
    public ApplicationRunner runner(MessageChannel output) {
        return args -> {
            output.send(MessageBuilder.withPayload("foo")
                    .setHeader("rk", "invalid")
                    .build());
        };
    }

    @Autowired
    RabbitTemplate template;

    @Bean
    public Queue unroutable() {
        return new Queue("unroutable.messages");
    }

    @ServiceActivator(inputChannel = "errorChannel")
    public void error(Message<?> error) {
        if (error.getPayload() instanceof ReturnedAmqpMessageException) {
            this.template.send(unroutable().getName(),
                    ((ReturnedAmqpMessageException) error.getPayload()).getAmqpMessage());
        }
    }

}

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como lidar com o par de valores-chave de retorno Dapper com Dynamic do LINQ

Como lidar com o par de valores-chave de retorno Dapper com Dynamic do LINQ

Como lidar com o controle ComboBox pintado de forma inválida no winapi win32?

Como lidar com o controle ComboBox pintado de maneira inválida no winapi win32?

Como resolver a "exceção de armazenamento de chave inválida"?

Como publicar várias mensagens em uma única fila com chave de roteamento diferente no RabbitMQ?

Como configuro o roteamento com dois valores de rota opcionais?

Como combinar a chave de roteamento com o padrão de ligação para troca de tópico RabbitMQ usando python regex?

Como lidar com a inserção de uma chave já existente?

Como lidar com a solicitação de roteamento "john.myexample.com" no ASP.NET Core

Como lidar com o UserWarning: convertendo IndexedSlices esparsos em um tensor denso de forma desconhecida

Como lidar com o roteamento condicional ou a navegação de componentes sem o roteador React

Como lidar com as alterações de roteamento Angular 2+ (7) sem refatoração?

Como lidar com parâmetros de roteamento MVC não utilizados

Como lidar com valores nulos no modo de exibição mvc?

Como acessar o valor de uma chave desconhecida?

Como misturar pseudo classe válida / inválida com o validador de controle de forma Angular?

Troca direta do RabbitMQ, com chave de roteamento e sem filas ou assinantes, isso é bom para o desempenho?

Scala como lidar com a exceção quando o par de valores-chave não está disponível no arquivo de propriedades usando scala

Como definir a chave de roteamento para o produtor

Como definir a chave de roteamento para o produtor

AggregationStrategy com org.apache.camel.CamelExchangeException: chave de correlação inválida

A palavra-chave com namespace torna a especificação de JSON inválida

Lidando com erro CORS/chave de cliente inválida para o Web Drop-In da Adyen

AggregationStrategy com org.apache.camel.CamelExchangeException: chave de correlação inválida

Comparação de transmissão inválida com valores de bloco - Tensorflow

Como devo lidar com arquivos de chave privada no Google AppEngine para contas de serviço?

Como lidar efetivamente com exceção de erro de chave em python?

Como lidar com a vinculação de seleção do Angular 5 a um valor nulo