spring:
rabbitmq:
host: 192.168.133.128
port: 5672
username: admin
password: admin
virtual-host: /
publisher-returns: true # 开启消息投递的回退模式退回模式作用于发送方的消息确认模式作用于exchange和queue之间。首先还是需要保证的是YAML配置中的回退模式开关打开,然后需要回调ReturnCallback回调函数进行确认消息的发送情况。
import com.dream.config.RabbitMQConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringRabbitProducerTest {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 生产者消息发送退回模式 return
* 发送方的消息确认模式作用于exchange和queue之间
*/
@Test
public void sender_test_return() {
// 1、第一步需要在 ConnectionFactory 打开运行回退模式开关也就是 配置 publisher-returns
// spring.rabbitmq.publisher-returns = true
// 2、第二步是rabbitTemplate定义ConfirmCallBack回调函数
// 3、设置一个exchange来处理消息的模式,两种模式
// 3.1、如果消息没有路由到Queue就默认丢弃消息,默认模式
// 3.2、如果消息没有路由到Queue就返回给消息的发送方ReturnCallback
// 默认是setMandatory(false),需要将消息返回给发送方就设置成true
rabbitTemplate.setMandatory(true);
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
/**
* 发送方的消息确认模式作用于生产者和exchange之间
* @param message 消息对象
* @param replyCode 返回的失败的状态码
* @param replyText 返回的失败的信息
* @param exchange 交换机
* @param routingKey 路由key
*/
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("returnedMessage 被执行了....");
}
});
// 4、发送消息进行测试
// rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "11.TOPIC_BOOT.DREAM", "spring test rabbitmq confirm ....");
for (int i = 1; i <= 50; i++) {
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "TOPIC_BOOT.DREAM", i + " spring test rabbitmq confirm ....");
}
}
} | 留言与评论(共有 0 条评论) “” |