springboot中rabbitMQ的使用

一、rabbitMQ有三种类型 direct、topic、fanout三种类型

1:direct类型是交换器和路由key完全匹配进行绑定的

例如:

消费端配置:

 

消费端代码:

@Component

@RabbitListener(bindings=@QueueBinding(

value= @Queue(value="${mq.config.queue.error}",autoDelete="false"),

exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.DIRECT),

key="${my.config.queue.error.routing.key}"

))

public class RabbitMQDirectErrorConsumer {

 

@RabbitHandler

public void recevier(String msg) {

System.out.println("receiver ===error==========="+msg);

 

}

 

}

消息提供端配置:

消息提供端代码:

@Value("${mq.config.direct.exchange}")

private String exchange;

 

@Autowired

private AmqpTemplate amqpTemplate;

 

public void sendErrorDirect() {

 

String msString = "hello" + new Date();

 

this.amqpTemplate.convertAndSend(exchange,"error.routing.key",msString);//路由key

}

 

 

 

2:topic通过交换器和模糊匹配路由key绑定

例如:

消费端配置:

springboot中rabbitMQ的使用_第1张图片

消费端代码:

1:@Component

@RabbitListener(bindings=@QueueBinding(

value= @Queue(value="${mq.config.queue.debug}",autoDelete="false"),

exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.TOPIC),

key="*.log.debug"

))

public class RabbitMQTopicDebugConsumer {

 

@RabbitHandler

public void recevier(String msg) {

System.out.println("receiver ===debug==========="+msg);

 

}

 

}

2:@Component

@RabbitListener(bindings=@QueueBinding(

value= @Queue(value="${mq.config.queue.logs}",autoDelete="false"),

exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.TOPIC),

key="*.log.*"

))

public class RabbitMQTopicLogsConsumer {

 

@RabbitHandler

public void recevier(String msg) {

System.out.println("receiver ===all==========="+msg);

}

 

}

 

消息提供端配置:

springboot中rabbitMQ的使用_第2张图片

 

springboot中rabbitMQ的使用_第3张图片

 

3:fanout 广播机制使用,通过交换器绑定的

例如:

消费端配置:

springboot中rabbitMQ的使用_第4张图片

 

1、

springboot中rabbitMQ的使用_第5张图片

2、

springboot中rabbitMQ的使用_第6张图片

消息提供端配置:

 

springboot中rabbitMQ的使用_第7张图片

代码:

 

springboot中rabbitMQ的使用_第8张图片

不需要路由key值

 

二、rabbitMQ的持久化

 

就是将autoDelete="false"

 

三、rabbitMQ的ack,确认机制

只有消费者正常消费信息了,rabbitMQ才会把队列里面的消息给删除掉,如果消费者再消费信息的时候出现了异常,则会重复无限的发布消息。直到内存泄漏。故在使用的时候要注意

解决方法有2种:

1、在抛出异常的地方用try catach捕获异常

2、在配置文件中如下配置(推荐):

#rabbitMQ重试机制

spring.rabbitmq.listener.simple.retry.enabled=true

#重试默认的次数5

spring.rabbitmq.listener.simple.retry.max-attempts=5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(springboot中rabbitMQ的使用)