一.消息生成者

1.1消息生成者配置
springboot配置rabbitmq - 图1

1.2 消息发送端代码
springboot配置rabbitmq - 图2

1.3 创建交换机,队列,并建立关系
springboot配置rabbitmq - 图3

springboot配置rabbitmq - 图4

二.消费者

2.1消费者
springboot配置rabbitmq - 图5 :::success @RabbitListener与@RabbitHandler ::: 1.@RabbitListener 注解是指定某方法作为消息消费的方法,例如监听某 Queue 里面的消息。
2.@RabbitListener标注在方法上,直接监听指定的队列,此时接收的参数需要与发送市类型一致

  1. @Component
  2. public class PointConsumer {
  3. //监听的队列名
  4. @RabbitListener(queues = "point.to.point")
  5. public void processOne(String name) {
  6. System.out.println("point.to.point:" + name);
  7. }
  8. }

3.@RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,根据接受的参数类型进入具体的方法中。

  1. @Component
  2. @RabbitListener(queues = "consumer_queue")
  3. public class Receiver {
  4. @RabbitHandler
  5. public void processMessage1(String message) {
  6. System.out.println(message);
  7. }
  8. @RabbitHandler
  9. public void processMessage2(byte[] message) {
  10. System.out.println(new String(message));
  11. }
  12. }


三.限流配置

3.1配置文件
springboot配置rabbitmq - 图6
#在单个请求中处理的消息个数,他应该大于等于事务数量(unack的最大数量) spring.rabbitmq.listener.simple.prefetch=2 #在@RabbitListener(queues = { HighDeviceMessage.QUEUE_NAME },concurrency = “${spring.rabbitmq.highdevice.concurrency}”)配置的占位符配置 spring.rabbitmq.highdevice.concurrency=2-5
springboot配置rabbitmq - 图7

 3.2消费者配置

  1. @Component
  2. public class HighDeviceMessageHandler {
  3. // @RabbitListener(queues = { HighDeviceMessage.QUEUE_NAME },ackMode ="MANUAL",concurrency = "1-10")
  4. @RabbitListener(queues = { HighDeviceMessage.QUEUE_NAME },ackMode ="MANUAL",concurrency = "${spring.rabbitmq.highdevice.concurrency}")
  5. public void handle(String msgStr, Channel channel,@Headers Map<String,Object> headers) {
  6. try {
  7. log.info("休息3秒");
  8. log.info("handle HighDeviceMessage:{}---",msgStr);
  9. TimeUnit.SECONDS.sleep(3);
  10. long deliveryTag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
  11. //手工ack
  12. channel.basicAck(deliveryTag,true);
  13. } catch (Exception e) {
  14. log.error("handle HighDeviceMessage err", e);
  15. }
  16. }
  17. }