消息系统主要用来处理比较耗时的任务, 如一个 http 请求进来之后,可能需要比较长的处理时间, 可以把这个请求封装为一个 message task, 发到消息系统, 等待后端系统处理, 同时返回 http response 郑州处理中.
生产者(producer) -> Exchange -> Queue -> Consumer
当 Producer 发出之后, 它可以通过 Publisher Confirm 来确认一定发出去了;
Consumer 有可能没处理完就 crash 了, 不过 queue 可以通过 consumer 的 Ack 来确认消息发到 consumer, 被处理, 并且处理完成;
RabbitMQ 可以持久化(存入硬盘) Queue & Message 来保证消息不丢失;
direct, topic, headers and fanout
- RabbitMQ server 端的工具命令是: rabbitmqctl
- Exchange 和 queue 通过 binding 来确认关系: channel.queueBind("queueName", "exchangeName", "");
- Producer 发送消息到 Exchange, 并带着 routeKey, Exchange 有 exchange type, queue 和 exchange binding, binding 时候可以设置 routeKey, consumer 通过 queue 接受消息.
- 一般的队列和发布订阅是通过 exchange 的 exchange type 来实现的. 配合 topic 的 routeKey * and # 两个特殊字符