场景
嵌入式智能设备上做一些简单的异步处理,例如缩略图生成等
主要技术栈是golang 和python
消息队列对比
NSQ | Redis | Nats Streaming | mosquitto | RabbitMQ | |
---|---|---|---|---|---|
开发语言 | Go | C | Go/Ruby | erlang | C,C++ |
通信协议 | / | / | / | MQTT | AMQP |
吞吐量 | 1万+ | 8万+ | 10万+ | 1万+ | 10万+ |
消息持久化 | 支持 | 支持 | 支持 | 支持 | 支持 |
多语言支持 | 支持 | 支持 | 支持 | C | 支持 |
镜像大小 | 较小 | 较小 | 较小 | 较小 | 较大 |
资源使用 | 低 | 低 | 低 | 低 | 较高 |
看到docker hub 上面提示 Nats Streaming 项目已被弃用(不会及时更新,但可用),如果要用持久化功能,需要使用Nats-JetStream
Redis:
优点 :简单轻量,除了可以用发布订阅模式作为消息队列外,还可以用作高速缓存
缺点:在某些极端情况下有可能导致数据丢失,比如队列消息积压过多会丢弃,以及redis本身宕机,虽然有AOF来持久化,但是默认是每秒异步写,所以极端情况下还是有可能会丢失数据。
MQTT协议的mosquito主要应用于IoT领域,是标准MQTT协议的实现,但是好像目前只支持C语言进行开发,但受限于开发语言较少,所以暂不考虑。
在该场景下,个人更倾向于使用redis 或者 nsq 来作为消息队列