1.对象序列化在配置类中配置
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
2.配置类的和@Bean的方式声明队列和交换机及其绑定关系
@Configuration
public class RabbitMqConfig {
@Autowired
private RabbitTemplate rabbitTemplate;
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public Exchange exchange() {
Exchange exchange = ExchangeBuilder.directExchange("hello.exchange.direct").durable(true).build();
return exchange;
}
@Bean
public Queue queue() {
Queue queue = new Queue("hello.queue", true, false, false);
return queue;
}
@Bean
public Binding binding() {
Binding binding = BindingBuilder.bind(queue()).to(exchange()).with("hello.test").noargs();
return binding;
}
@PostConstruct
//消息从生产者到mq的确认机制
public void initRabbitMq() {
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("confirm ...correlationData" + correlationData + "ack=>" + ack + "==>cause" + cause);
}
});
//消息从exchange到消费了就不会执行这段代码 反之
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("message = " + message + ", replyCode = " + replyCode + ", replyText = " + replyText + ", exchange = " + exchange + ", routingKey = " + routingKey);
}
});
}
}

配置文件中配置
3.监听者使用注解去声明队列交换机及绑定关系
机器消费者消费消息后的确认机制ack
public class RabbitMqListener {
@RabbitListener(bindings =
@QueueBinding(
exchange = @Exchange(name = "hello.exchange.direct", type = ExchangeTypes.DIRECT),
value = @Queue(name = "hello.queue"),
key = "hello.test"
)
)
public void getMsg(Message message, String msg, Channel channel) {
MessageProperties messageProperties = message.getMessageProperties();
long deliveryTag = messageProperties.getDeliveryTag();
try {
channel.basicAck(deliveryTag, false);
} catch (IOException e) {
e.printStackTrace();
}
}
}