下载
- windows:blog.csdn.net/qq_41929714…
- centos7:blog.csdn.net/www10564811…
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置
rabbitmq服务器没有收到ack回复后,每次消费者离线都会将失败的消息重新入队列
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-attempts=3
spring.rabbitmq.listener.simple.acknowledge-mode=manual
配置类
@Configuration
public class QueueConfig {
@Bean
public CustomExchange customerExchange() {
return new CustomExchange("customerExchange", "direct", true, false);
}
@Bean
public Queue customerQueue() {
return new Queue("customerQueue");
}
@Bean
public Binding binding(@Qualifier("customerQueue") Queue queue,
@Qualifier("customerExchange") CustomExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("customer_behavior").noargs();
}
}
生产者
@Resource
private RabbitTemplate rabbitTemplate;
@RequestMapping("sendMessage")
@ResponseBody
public void sendMessage(String msg) {
Map<String, Object> params = new HashMap<>();
params.put("code", 1);
params.put("msg", msg);
rabbitTemplate.convertAndSend("customerExchange", "customer_behavior", JSON.toJSONString(params));
}
消费者
@Component
@RabbitListener(queues = "demoQueue")
public class Consumer {
@RabbitHandler
public void queueHandle(String queueMessage, @Headers Map<String, Object> headers, Channel channel) throws IOException {
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
System.out.println("=====>" + queueMessage);
// 确认消息
channel.basicAck(deliveryTag,false);
}
}