说明
正文
概述
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置类
生产者发送消息
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
public class SendMessageController {
@Autowired
RabbitTemplate rabbitTemplate;
//发送消息到正常队列
@GetMapping("/sendDirectMessage")
public String sendDirectMessage(@RequestParam String message) {
SimpleDateFormat Dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(Dateformat.format(new Date())+":发送消息");
//将消息携带绑定键值:TestDirectRouting 发送到交换机TestDirectExchange
rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", message);
return "ok";
}
//发送消息到死信队列
@GetMapping("/sendDelayMessage")
public String sendDelayMessage(@RequestParam String message,@RequestParam(value = "delayTimes") long delayTimes) {
SimpleDateFormat Dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(Dateformat.format(new Date())+":发送消息");
//将消息携带绑定键值:TestTtlDirectRouting 发送到交换机TestTtlDirectExchange
rabbitTemplate.convertAndSend("TestTtlDirectExchange", "TestTtlDirectRouting", message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
return message;
}
});
return "ok";
}
}
消费者打印消息
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
@RabbitListener(queues = "TestDirectQueue")//监听TestDirectQueue队列
public class AcceptMessageController {
@Autowired
RabbitTemplate rabbitTemplate;
@RabbitHandler//执行方法
public void cancelDirectMessage(String testMessage) {
SimpleDateFormat Dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(Dateformat.format(new Date())+":消费者收到消息 : " + testMessage);
}
}
测试