1. 出现原因:生产者大量产生数据时,消费者无法快速消费,需要一个中间层,去缓冲这批数据
2. 消息顺序:消息生产者-->交换器-->队列-->消费者
3. 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
4. 依赖环境ERlang安装
官网:http://www.erlang.org/downloads
安装好之后配置环境变量
cmd-->erl,出现版本代表成功安装
5. 下载rabbitMQ:http://www.rabbitmq.com/install-windows.html
6. 启动:
6.1 set ERLANG_HOME=xxxx
6.2 rabbitmq-server.bat(加入报错就删除C:\Users\kh\AppData\Roaming\RabbitMQ\db下所有文件重新启动)
6.3 在sbin目录下, 执行rabbitmq-plugins.bat enable rabbitmq_management,安装管理插件
7. rabbit基本操作参考:https://www.cnblogs.com/ericli-ericli/p/5902270.html
8. 对rabbitmq进行配置
spring.application.name=spirng-boot-rabbitmq spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=15672 spring.rabbitmq.username=kanghu spring.rabbitmq.password=11111
9. 队列配置
@Configuration public class RabbitConfig { @Bean public Queue Queue() { return new Queue("hello"); } }
生产者:
@Repository public class RabbitMQSend { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String context = "hello " + new Date(); System.out.println("Sender : " + context); this.rabbitTemplate.convertAndSend("hello", context); } }
消费者:
@Component @RabbitListener(queues = "hello") public class RabbitMQReceiver { @RabbitHandler public void process(String hello) { System.out.println("Receiver : " + hello); } }
测试:
@RestController public class RabbitMQController { @Autowired RabbitMQSend rabbitMQSend; @RequestMapping("/rabbit") public void testRabbit() { rabbitMQSend.send(); } }
10. 启动报错:
原因:配置端口为5672,不是15672,15672是管理端的端口!