@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue(name="test111", durable = "true", exclusive = "false"),
exchange = @Exchange(type = "direct", name = "directexchange"),
key = {"direct1"}
)
})
public void listener(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("接收到消息message1 = " + message + tag);
channel.basicAck(tag, true);
}
@Configuration
public class RabbitConfig {
@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPrefetchCount(1);
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMandatory(true);
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("rabbit 消息发送失败" + message.toString() + "===" + replyText + "===" + exchange + "===" + routingKey);
}
});
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (!ack) {
System.out.println("rabbit 消息发送失败" + cause + correlationData.toString());
} else {
System.out.println("rabbit 消息发送成功 ");
}
});
return rabbitTemplate;
}
spring:
rabbitmq:
virtual-host: /
username: guest
password: guest
host: 172.20.10.6
port: 5672
publisher-returns: true
publisher-confirm: true
publisher-confirm-type: correlated