org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-amqp
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-jdbc
com.alibaba
fastjson
1.2.17
3.2.1.2配置文件内容:
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: root123
rabbitmq:
host: localhost
port: 5672
username: admin
password: admin123
virtual-host: /
#必须配置这个,生产者才会确认回调
publisher-confirm-type: correlated
publisher-returns: true
#重要,手动开启消费者ACK,控制消息在MQ中的删除、重发
listener:
simple:
acknowledge-mode: MANUAL
3.2.2 订单中心代码
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.beans.Transient;
/**
* @Author Lee
* @Description 订单中心
* @Date 2020/1/30 16:57
* @Version 1.0
*/
@Slf4j
@Service
public class OrderService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private RabbitTemplate rabbitTemplate;
@PostConstruct
public void setup(){
//消息发送完成后,则回调此方法,ack代表此方法是否发送成功
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback(){
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//ack为true,代表MQ已经准确收到消息
if(!ack){
re