当波及到音讯发送和接管的可靠性,Spring Boot提供了一些机制来确保音讯的牢靠传递。其中包含音讯确认机制和重试机制。上面是一个示例代码,演示如何在Spring Boot中实现牢靠的音讯发送和接管。
首先,咱们须要配置RabbitMQ的连贯信息和相干属性。在application.properties
文件中增加以下配置:
# RabbitMQ连贯配置spring.rabbitmq.host=localhostspring.rabbitmq.port=5672spring.rabbitmq.username=guestspring.rabbitmq.password=guest# 音讯重试配置spring.rabbitmq.listener.simple.retry.enabled=truespring.rabbitmq.listener.simple.retry.max-attempts=3spring.rabbitmq.listener.simple.retry.initial-interval=5000spring.rabbitmq.listener.simple.retry.multiplier=2
接下来,咱们创立队列、一个音讯发送者(Producer)和一个音讯接收者(Consumer)的示例代码。
定义队列示列代码:
@Configurationpublic class RabbitMQConfig { @Bean public Queue fanout_queue_email() { return new Queue("fanout_queue_email"); }}
Producer(音讯发送者)示例代码:
import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class MessageProducer { private final RabbitTemplate rabbitTemplate; @Autowired public MessageProducer(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; } public void sendMessage(String message) { rabbitTemplate.convertAndSend("fanout_queue_sms", message); System.out.println("音讯发送胜利:" + message); }}
在下面的代码中,咱们注入了RabbitTemplate
对象,它是Spring Boot提供的用于发送音讯的工具类。通过调用rabbitTemplate.convertAndSend()
办法发送音讯到名为fanout_queue_sms
的队列
Consumer(音讯接收者)示例代码:
import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;@Componentpublic class MessageConsumer { @RabbitListener(queues = "fanout_queue_sms") public void receiveMessage(String message) { System.out.println("接管到音讯:" + message); // 模仿解决音讯的业务逻辑 processMessage(message); } private void processMessage(String message) { // 模仿业务解决耗时 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } // 手动抛出异样,触发音讯重试 if (message.contains("error")) { throw new RuntimeException("解决音讯失败"); } System.out.println("音讯解决胜利:" + message); }}
在下面的代码中,咱们应用@RabbitListener
注解标记receiveMessage()
办法,示意它是一个音讯监听器,监听名为fanout_queue_sms
的队列。当接管到音讯时,会触发receiveMessage()
办法进行解决。
在processMessage()
办法中,咱们模仿了业务解决的耗时,并通过手动抛出异样的形式触发音讯重试机制。如果音讯解决失败,将会抛出运行时异样,触发Spring Boot的重试机制。
调用示例代码:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class MessageApplication { public static void main(String[] args) { // 启动Spring Boot利用 ConfigurableApplicationContext context = SpringApplication.run(MessageApplication.class, args); // 获取MessageProducer Bean MessageProducer producer = context.getBean(MessageProducer.class); // 发送音讯 producer.sendMessage("Hello, World!error"); }}
运行成果如下:
本文由mdnice多平台公布