12 Ocak 2021 Salı

Spring Amqp RabbitMQ MessagePostProcessor Arayüzü

Giriş
Şu satırı dahil ederiz
import org.springframework.amqp.core.MessagePostProcessor;
Açıklama şöyle.
Used in several places in the framework, such as AmqpTemplate#convertAndSend(Object, MessagePostProcessor) where it can be used to add/modify headers or properties after the message conversion has been performed.
Örnek - Header Değeri Atamak
Elimizde şöyle bir kod olsun
public class MyMessagePostProcessor implements MessagePostProcessor {

  private final Integer ttl;

  public MyMessagePostProcessor(final Integer ttl) {
    this.ttl = ttl;
  }

  @Override
  public Message postProcessMessage(final Message message) throws AmqpException {
    message.getMessageProperties().getHeaders().put("expiration", ttl.toString());
    return message;
  }
}
Şöyle yaparız. Birinci parametre exchange ismi, ikinci parametre routingkey, üçüncü parametre mesaj verisi, dördüncü parametre MessagePostProcessor nesnesi
inal String message = "message";
final MessagePostProcessor messagePostProcessor = new MyMessagePostProcessor(10000);
rabbitTemplate.convertAndSend("my.queue", "routingKey", message, messagePostProcessor);
Örnek - Property Değeri Atamak - Persistent Olmayan Mesaj
Açıklaması şöyle
The default delivery mode (in MessageProperties) is PERSISTENT.
To make it non-persistent you need to use a convertAndSend(...) method with a MessagePostProcessor to set the deliveryMode property.
Örnek - Property Değeri Atamak
Şöyle yaparızBirinci parametre exchange ismi, ikinci parametre routingkey, üçüncü parametre mesaj verisi, dördüncü parametre MessagePostProcessor nesnesi
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;


// bad json
template.setMessageConverter(new SimpleMessageConverter());
template.convertAndSend("", "my.queue", "\"routeId\":\"7\"}", m -> {
  m.getMessageProperties().setContentType("application/json");
  return m;
});

Hiç yorum yok:

Yorum Gönder