21 Mayıs 2020 Perşembe

Spring Amqp RabbitMQ RabbitTemplate Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.springframework.amqp.rabbit.core.RabbitTemplate;
AmqpTemplate sınıfından kalıtır.

constructor
Şöyle yaparız.
ConfigurableApplicationContext context = ...;
RabbitTemplate template = context.getBean(RabbitTemplate.class);
convertAndSend metodu
Örnek - routingKey + Message
Burada default exchange'e gönderilir. Şöyle yaparız.
template.convertAndSend("my.queue", new Foo());
Örnek - exchange + routingKey + message
Şöyle yaparız.
public void send(Blog blog) {
  rabbitTemplate.convertAndSend(config.getExchange(), config.getRoutingkey(), blog);
}
Örnek - exchange + routingKey + message + messagePostProcessor
MessagePostProcessor yazısına taşıdım

send metodu
Örnek
Şöyle yaparız
import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MessageSenderService { private final RabbitTemplate rabbitTemplate; @Autowired public MessageSenderService(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; } public void sendMessage(String message) { MessageProperties properties = new MessageProperties(); // Set message as persistent properties.setDeliveryMode(MessageDeliveryMode.PERSISTENT); Message rabbitMessage = new Message(message.getBytes(), properties); rabbitTemplate.send("my-exchange", "my-routing-key", rabbitMessage); } }
Açıklaması şöyle
By setting both the message delivery mode to PERSISTENT and declaring queues as durable, you ensure that messages sent to RabbitMQ are persisted, and even if RabbitMQ server restarts, the messages will not be lost.
Açıklaması şöyle
Ensure that your RabbitMQ queues are also declared as durable. You can do this by setting the durable attribute to true when declaring queues in your RabbitMQ configuration.

RabbitMQ stores persistent messages in its storage mechanism, which typically consists of regular filesystem storage on the server where RabbitMQ is running. RabbitMQ stores persistent messages on the server’s disk in a location specified by its configuration. This location is usually within the RabbitMQ data directory.
setExchange metodu
RabbitTemplate sınıfının sadece send() metodunu kullanabilmek için önce RabiitTemplat nesnesini sabit olarak bir exchange'e bağlamak gerekir.
Örnek
Şöyle yaparız
@Bean
public RabbitTemplate rubeExchangeTemplate() {
  RabbitTemplate r = new RabbitTemplate(this.rabbitConnectionFactory);
  r.setExchange("rmq-exchange");
  r.setMessageConverter(jsonMessageConverter());
  return r;
}
Örnek
Şöyle yaparızz
@Autowired
private RabbitTemplate   rabbit;

@Autowired
private MessageConverter jsonMessageConverter;

public void produce() {

  rabbit.setExchange("My.Exchange");
  rabbit.setRoutingKey("R.K");
  rabbit.setMessageConverter(jsonMessageConverter);
  MessageProperties props = new MessageProperties();
  props.setExpiration(Long.toString(expiration));
  Message toSend = new Message(message.toString().getBytes(), props);
  rabbit.send(toSend);
}
setMessageConverter metodu
Eğer bir MessageConverter atanmadıysa, RabbitTemplate Java Binary Serialization yöntemini kullanır.
JSON olarak göndermek için Jackson2JsonMessageConverter kullanılır.

Hiç yorum yok:

Yorum Gönder