引入pom
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
修改application.yml
生产端配置
spring:
rabbitmq:
address: 192.168.0.1:5672,192.168.0.2:5672,192.168.0.3:5672
username: guest
password: guest
virtual-host: /
connection-timeout: 15000
publisher-confirms: true
publisher-returns: true
template:
mandatory: true
消费端配置
spring:
rabbitmq:
address: 192.168.0.1:5672,192.168.0.2:5672,192.168.0.3:5672
username: guest
password: guest
virtual-host: /
connection-timeout: 15000
listener:
simple:
acknowledge-mode: manual
concurrency: 1
max-concurrency: 5
prefetch: 1
生产端Java代码
@Component
public class RabbitSender {
@Autowired
private RabbitTemplate rabbitTemplate;
final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("消息ACK结果"+ack);
}
};
public void send(Object message, Map<String,Object> properties){
MessageHeaders mhs = new MessageHeaders(properties);
Message<?> msg = MessageBuilder.createMessage(message,mhs);
rabbitTemplate.setConfirmCallback(confirmCallback);
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
MessagePostProcessor mpp = new MessagePostProcessor() {
@Override
public org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message) throws AmqpException {
System.out.println("--> post to do:" + message);
return message;
}
};
rabbitTemplate.convertAndSend("exchange-1",
"springboot.rabbit",
msg,mpp,correlationData);
}
}
消费端Java代码
@Component
public class RabbitReceiver {
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "queue-1",durable = "true"),
exchange = @Exchange(name="exchange-1",
durable = "true",type = "topic",ignoreDeclarationExceptions = "true"),
key="springboot.*"
)
)
@RabbitHandler
public void onMessage(Message message, Channel channel) throws IOException {
System.out.println("----------");
System.out.println("消费消息:"+message.getPayload());
Long deliveryTag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(deliveryTag,false);
}
}