SpringBoot 2 快速整合 RabbitMQ

前言

本文介绍了通过最简单方法使用 SpringBoot 2 整合 RabbitMQ,带你快速上手 RabbitMQ 的操作。

操作前需要先安装 RabbitMQ 服务。Windows 系统可以参考 Windows 环境安装 RabbitMQ

快速整合操作

  1. 首先在 pom.xml 中引入 spring-boot-starter-amqp starter 依赖。

    <dependency>  
    	<groupId>org.springframework.boot</groupId>  
    	<artifactId>spring-boot-starter-amqp</artifactId>  
    </dependency> 
    
  2. 在配置文件中添加 RabbitMQ 的相关配置,必选配置如下:

    # RabbitMQ 主机IP
    spring.rabbitmq.host=127.0.0.1
    # RabbitMQ 端口号
    spring.rabbitmq.port=5672
    # RabbitMQ 用户名
    spring.rabbitmq.username=guest
    # RabbitMQ 密码
    spring.rabbitmq.password=guest
    
  3. 创建队列
    主要是定义队列的名称,SpringBoot 使用 Queue对象进行定义。

    @Configuration
    public class RabbitMQConfig {
    	public static final String QUEUE = "queue";
    	
    	@Bean
    	public Queue queue() {
    		return new Queue(QUEUE,true);
    	}
    }
    

    Queue 构造器第一个参数是队列的名称,第二个参数表示是否持久化该队列。如果我们声 明一个持久队列,则持久为真(该队列将在服务器重新启动后继续存在)

  4. 创建发送者
    SpringBoot 为我们提供了 AmqpTemplate 它定义很多发送消息的 api。

    @Service
    public class RabbitMQSend {
    	private static Logger log = LoggerFactory.getLogger(RabbitMQSend.class);
    	
    	@Autowired
    	private AmqpTemplate amqpTemplate ;
    
    	public void send(Object message) {
    		amqpTemplate.convertAndSend(RabbitMQConfig.QUEUE, message);
    	}
    }
    
  5. 创建接受者
    在方法上声明 @RabbitListener,在@RabbitListener中指定使用的队列名称,并在该方法中定义String 类型消息参数。

    @Service
    public class RabbitReceiver {
    	private static Logger log = LoggerFactory.getLogger(RabbitReceiver.class);
    	
    	/**
    	 * Direct 模式  交换机模式
    	 * @param message
    	 */
    	@RabbitListener(queues=RabbitMQConfig.QUEUE)
    	public void receive(String message) {
    		log.info("receive message:"+message);
    	}
    	
    	/**
    	 * Direct 模式  交换机模式
    	 * @param message
    	 */
    	@RabbitListener(queues=RabbitMQConfig.QUEUE)
    	public void receive2(String message) {
    		log.info("receive2 message:"+message);
    	}
    }
    

测试

1 定义发送消息的Controller

@RestController
@RequestMapping("/rabbitMQDemo")
public class RabbitMQDemoController {
	
	@Autowired
	private RabbitMQSend send;
	
	@RequestMapping("/helloworld")
	public String helloword(@RequestParam("msg") String msg) {
		send.send(msg);
		return "发送成功!";
	}
}

2 通过 Jmeter 进行测试

创建20个线程访问 RabbitMQDemoController。
在这里插入图片描述在这里插入图片描述

测试结果如下:

  1. 2019-07-27 19:09:35.549 INFO 5716 — [cTaskExecutor-1]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  2. 2019-07-27 19:09:35.603 INFO 5716 — [TaskExecutor-10]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  3. 2019-07-27 19:09:35.668 INFO 5716 — [cTaskExecutor-9]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  4. 2019-07-27 19:09:35.717 INFO 5716 — [cTaskExecutor-3]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  5. 2019-07-27 19:09:35.760 INFO 5716 — [cTaskExecutor-7]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  6. 2019-07-27 19:09:35.834 INFO 5716 — [cTaskExecutor-6]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  7. 2019-07-27 19:09:35.867 INFO 5716 — [cTaskExecutor-5]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  8. 2019-07-27 19:09:35.916 INFO 5716 — [cTaskExecutor-4]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  9. 2019-07-27 19:09:35.961 INFO 5716 — [cTaskExecutor-8]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  10. 2019-07-27 19:09:36.010 INFO 5716 — [cTaskExecutor-2]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive message:2123
  11. 2019-07-27 19:09:36.059 INFO 5716 — [cTaskExecutor-1]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  12. 2019-07-27 19:09:36.107 INFO 5716 — [cTaskExecutor-8]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  13. 2019-07-27 19:09:36.156 INFO 5716 — [TaskExecutor-10]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  14. 2019-07-27 19:09:36.209 INFO 5716 — [cTaskExecutor-6]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  15. 2019-07-27 19:09:36.258 INFO 5716 — [cTaskExecutor-7]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  16. 2019-07-27 19:09:36.308 INFO 5716 — [cTaskExecutor-3]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  17. 2019-07-27 19:09:36.355 INFO 5716 — [cTaskExecutor-5]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  18. 2019-07-27 19:09:36.403 INFO 5716 — [cTaskExecutor-4]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  19. 2019-07-27 19:09:36.462 INFO 5716 — [cTaskExecutor-2]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123
  20. 2019-07-27 19:09:36.509 INFO 5716 — [cTaskExecutor-9]
    c.l.rabbitmq.helloworld.RabbitReceiver : receive2 message:2123

小结

SpringBoot 通过自带 AmqpTemplate 操作 RabbitMQ 非常的简单,我们只需要定义队列发送者(通过 AmqpTemplate 发送 api )、接受者 (在方法上 @RabbitListener)即可完成简单的操作。需要注意的是:发送者和接收者的队列名称 必须一样,否则消息会接受不到。

代码示例

具体代码示例请查看 :
博客的读者可以通过查看下面仓库的中的模块工程名: spring-boot-2.x-rabbit-mq

Github:https://github.com/zhuoqianmingyue/springbootexamples/tree/master/spring-boot-2.x-rabbit-mq
如果您对这些感兴趣,欢迎 star、或转发给予支持!转发请标明出处!

发布了136 篇原创文章 · 获赞 502 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/ljk126wy/article/details/97543094