@Override protected boolean doSend(Message<?> message, long timeout) { if (this.extractPayload) { this.amqpTemplate.send(getExchangeName(), getRoutingKey(), MappingUtils.mapMessage(message, this.rabbitTemplate.getMessageConverter(), this.outboundHeaderMapper, this.defaultDeliveryMode, this.headersMappedLast)); } else { this.amqpTemplate.convertAndSend(getExchangeName(), getRoutingKey(), message); } return true; }
endpoint.getAmqpTemplate().send(exchangeName, routingKey, inMessage.toAMQPMessage(msgConverter));
String routingKey = this.errorRoutingKey != null ? this.errorRoutingKey : this.prefixedOriginalRoutingKey(message); this.errorTemplate.send(this.errorExchangeName, routingKey, message); if (this.logger.isWarnEnabled()) { this.logger.warn("Republishing failed message to exchange '" + this.errorExchangeName this.errorTemplate.send(routingKey, message); if (this.logger.isWarnEnabled()) { this.logger.warn("Republishing failed message to the template's default exchange with routing key "
endpoint.getAmqpTemplate().send(exchangeName, routingKey, inMessage.toAMQPMessage(msgConverter));
String routingKey = this.errorRoutingKey != null ? this.errorRoutingKey : this.prefixedOriginalRoutingKey(message); this.errorTemplate.send(this.errorExchangeName, routingKey, message); if (this.logger.isWarnEnabled()) { this.logger.warn("Republishing failed message to exchange '" + this.errorExchangeName this.errorTemplate.send(routingKey, message); if (this.logger.isWarnEnabled()) { this.logger.warn("Republishing failed message to the template's default exchange with routing key "
@Test public void shouldPublishWithSetErrorRoutingKeyWhenExchangeAndErrorRoutingKeyProvided() { recoverer = new RepublishMessageRecoverer(amqpTemplate, "errorExchange", "errorRoutingKey"); recoverer.recover(message, cause); verify(amqpTemplate).send("errorExchange", "errorRoutingKey", message); }
@Test public void shouldPublishWithRoutingKeyPrefixedWithErrorWhenExchangeIsNotSet() { recoverer = new RepublishMessageRecoverer(amqpTemplate); recoverer.recover(message, cause); verify(amqpTemplate).send("error.some.key", message); }
@Override public void recover(final Message message, final Throwable cause) { Map<String, Object> headers = message.getMessageProperties().getHeaders(); headers.put("x-exception-stacktrace", ExceptionUtils.getFullStackTrace(cause)); headers.put("x-exception-message", ExceptionUtils.getMessage(cause)); headers.put("x-exception-root-cause-message", ExceptionUtils.getRootCauseMessage(cause)); headers.put("x-original-exchange", message.getMessageProperties().getReceivedExchange()); headers.put("x-original-routingKey", message.getMessageProperties().getReceivedRoutingKey()); headers.put("x-original-queue", message.getMessageProperties().getConsumerQueue()); headers.put("x-recover-time", new Date().toString()); String deadLetterExchangeName = rabbitmqProperties.getDeadLetterConfig().getDeadLetterExchange().getName(); String deadLetterRoutingKey = rabbitmqProperties.getDeadLetterConfig().createDeadLetterQueueName(message.getMessageProperties().getConsumerQueue()); headers.put("x-dead-letter-exchange", deadLetterExchangeName); headers.put("x-dead-letter-queue", deadLetterRoutingKey); if(headers.containsKey("correlation-id")) { message.getMessageProperties().setCorrelationIdString((String) headers.get("correlation-id")); } headers.putAll(loadAdditionalHeaders(message, cause)); for (MessageExceptionHandler messageExceptionHandler : messageExceptionHandlers) { try { messageExceptionHandler.handle(message, cause); } catch (Exception e) { // To catch any exception in the MessageExceptionHandler to avoid the interruption in other MessageExceptionHandlers log.error("Exception occurred while processing '{}' message exception handler.", messageExceptionHandler, e); } } this.errorTemplate.send(deadLetterExchangeName, deadLetterRoutingKey, message); log.warn("Republishing failed message to exchange '{}', routing key '{}', message {{}} , cause {}", deadLetterExchangeName, deadLetterRoutingKey, message, cause); }
@Test public void shouldPublishToProvidedExchange() { recoverer = new RepublishMessageRecoverer(amqpTemplate, "error"); recoverer.recover(message, cause); verify(amqpTemplate).send("error", "error.some.key", message); }
@Override protected boolean doSend(Message<?> message, long timeout) { if (this.extractPayload) { this.amqpTemplate.send(getExchangeName(), getRoutingKey(), MappingUtils.mapMessage(message, this.rabbitTemplate.getMessageConverter(), this.outboundHeaderMapper, this.defaultDeliveryMode, this.headersMappedLast)); } else { this.amqpTemplate.convertAndSend(getExchangeName(), getRoutingKey(), message); } return true; }
@Test public void testWithRepublishRecovererExplicitExchangeAndRouting() throws Throwable { AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new RepublishMessageRecoverer(amqpTemplate, "bar", "baz")) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder.withBody("".getBytes()).build(); delegate.onMessage("", message); assertEquals(3, count.get()); verify(amqpTemplate).send("bar", "baz", message); }
private void send(Object object, Address replyToAddress, Message requestMessage) { Message message = this.messageConverter.toMessage(object, new MessageProperties()); message.getMessageProperties().setCorrelationId(requestMessage.getMessageProperties().getCorrelationId()); getAmqpTemplate().send(replyToAddress.getExchangeName(), replyToAddress.getRoutingKey(), message); }
@Test public void testWithRepublishRecovererDefaultExchangeAndRoutingCustomPrefix() throws Throwable { AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new RepublishMessageRecoverer(amqpTemplate).errorRoutingKeyPrefix("bar.")) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder.withBody("".getBytes()).setReceivedRoutingKey("foo").build(); delegate.onMessage("", message); assertEquals(3, count.get()); verify(amqpTemplate).send("bar.foo", message); }
@Test public void testWithRepublishRecovererCustomExchangeAndDefaultRoutingCustomPrefix() throws Throwable { AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new RepublishMessageRecoverer(amqpTemplate, "baz").errorRoutingKeyPrefix("bar.")) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder.withBody("".getBytes()).setReceivedRoutingKey("foo").build(); delegate.onMessage("", message); assertEquals(3, count.get()); verify(amqpTemplate).send("baz", "bar.foo", message); }
@Test public void testWithRepublishRecovererDefaultExchangeAndRouting() throws Throwable { AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new RepublishMessageRecoverer(amqpTemplate) { @Override protected Map<? extends String, ? extends Object> additionalHeaders(Message message, Throwable cause) { return Collections.singletonMap("fooHeader", "barValue"); } }) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder .withBody("".getBytes()) .setReceivedExchange("exch") .setReceivedRoutingKey("foo") .build(); delegate.onMessage("", message); assertEquals(3, count.get()); verify(amqpTemplate).send("error.foo", message); assertNotNull(message.getMessageProperties().getHeaders() .get(RepublishMessageRecoverer.X_EXCEPTION_STACKTRACE)); assertNotNull(message.getMessageProperties().getHeaders().get(RepublishMessageRecoverer.X_EXCEPTION_MESSAGE)); assertNotNull(message.getMessageProperties().getHeaders().get(RepublishMessageRecoverer.X_ORIGINAL_EXCHANGE)); assertNotNull(message.getMessageProperties().getHeaders() .get(RepublishMessageRecoverer.X_ORIGINAL_ROUTING_KEY)); assertEquals("barValue", message.getMessageProperties().getHeaders().get("fooHeader")); }
endpoint.getAmqpTemplate().send(replyToAddress.getExchangeName(), replyToAddress.getRoutingKey(), replyMessage.toAMQPMessage(msgConverter)); } catch(AmqpConnectException e) { LOG.error("AMQP Connection error, marking this connection as failed");
endpoint.getAmqpTemplate().send(replyToAddress.getExchangeName(), replyToAddress.getRoutingKey(), replyMessage.toAMQPMessage(msgConverter)); } catch(AmqpConnectException e) { LOG.error("AMQP Connection error, marking this connection as failed");