1、参考
https://blog.youkuaiyun.com/zsj777/article/details/115474709
2、配置文件添加
spring.cloud.stream.bindings.example-topic-output.content-type=application/json
3、实体类
package com.example.demo.controller;
import java.io.Serializable;
public class FaceRabbitAddMessage implements Serializable {
private Integer visitorId;
private String date;
//延时发送时间 毫秒
private Integer delayTime;
public Integer getVisitorId() {
return visitorId;
}
public void setVisitorId(Integer visitorId) {
this.visitorId = visitorId;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Integer getDelayTime() {
return delayTime;
}
public void setDelayTime(Integer delayTime) {
this.delayTime = delayTime;
}
}
4、Listener修改
package com.example.demo.controller;
import org.springframework.amqp.AmqpRejectAndDontRequeueException;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
@Component
public class TestListener {
private int count = 1;
@StreamListener(TestTopic.INPUT)
public void receive(@Payload FaceRabbitAddMessage payload, @Headers MessageHeaders messageHeaders) {
System.out.println(count);
// 设定了计数器count,当count为3的时候抛出AmqpRejectAndDontRequeueException
// 这个特定的异常。此时,当只有当抛出这个异常的时候,才会将消息放入DLQ队列,从而不会造成严重的堆积问题。
if (count == 3) {
count = 1;
throw new AmqpRejectAndDontRequeueException("tried 3 times failed, send to dlq!");
} else {
count++;
throw new RuntimeException("Message consumer failed!");
}
}
}
5、消息发送类修改
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.SubscribableChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String echo() {
return "22";
}
@GetMapping("/index")
public String index() {
return "3333";
}
@Autowired
private TestTopic testTopic;
@GetMapping("/sendMsg")
public String sendMsg() {
FaceRabbitAddMessage messageVO = new FaceRabbitAddMessage();
messageVO.setDate("DDDDD");
testTopic.output().send(MessageBuilder.withPayload(messageVO).setHeader("x-delay", 15000).build());
return "发送成功";
}
}