RabbitMQConfig
public static final String TEST_QUEUE1_MSG = “TEST_MSG1.MSG”;
public static final String TEST_EXCHANGE = "TEST_EXCHANGE.EXCHANGE";
@Bean
public Queue testMsgQueue() {
Queue queue = new Queue(TEST_QUEUE1_MSG, true, false, false);
return queue;
}
@Bean
public FanoutExchange testManagementFanoutExchange() {
FanoutExchange fanoutExchange = new FanoutExchange(TEST_EXCHANGE, true, false);
return fanoutExchange;
}
@Bean
Binding bindingExchangeTestManagementMsg(Queue testMsgQueue, FanoutExchange testManagementFanoutExchange) {
return BindingBuilder.bind(testMsgQueue).to(testManagementFanoutExchange);
}
Sender
@Component
public class MQSender {
@Autowired
private AmqpTemplate amqpTemplate;
public Object testDeadQueue(String msg) {
Object obj = this.amqpTemplate.convertSendAndReceive(RabbitConfigBack.TEST_QUEUE1_MSG, msg);
return obj;
}
}
Consumer
@RabbitHandler
@RabbitListener(queues = RabbitConfigBack.TEST_QUEUE1_MSG)
public boolean process(String msg, Message message, Channel channel) throws IOException, InterruptedException {
try {
System.out.println(LocalDateTime.now() + ":Subscriber:" + new String(message.getBody(), "UTF-8"));
//当程序处理出现问题时,消息使用basicReject上报
int a = 0;
int b = 1 / a;
channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
return true;
} catch (Exception ex) {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
return false;
}
}
接口调用
@GetMapping(“testDeadQueue”)
public void testDeadQueue(String msg) {
Object result = mqSender.testDeadQueue(msg);
int index = 1;
while (result.equals(false)) {
System.out.println("消费失败,重新进入队列");
//消费失败,重新进入队列
if (index > 2) {
break;
}
result = mqSender.testDeadQueue(msg);
index++;
}
if (result.equals(true)) {
System.out.println("消费成功!!!,进行下步操作");
} else {
System.out.println("消费失败!!!,进行下步操作");
}
}