mq?
翻阅了一些资料,目前市面上流行的消息队列大概有zeroMQ,robbitMQ, kafka, activeMQ。
zeroMQ
feature:可以使用任意语言,在任何平台上。
信息可以负载在ipc,tcp,tipc,多路广播。
模式匹配比如说pub-sub,push-pull,router-dealer
高性能的异步io引擎,封装在了一个很小的库里。
支持所有的现代语言和平台
构建到多种架构中:中央式,分布式,小型化,或者是大型化。
社区支持
kafka
基本已经被更强更快更好的robbitMQ给替代了,功能基本相近。
robbitMQ
RabbitMQ是一种消息中间件,能够很好的处理来自客户端的异步消息发送及请求,将消息发送放入到服务端的队列池中,而接收端可以根据RabbitMQ配置的转发机制接收和过滤服务端转发来的消息。RabbitMQ可以根据指定的消息转发规则进行消息的转发、缓冲和持久化操作,这也是其根身立命的地方,但是其诞生的主要目的是为了均衡线程耗时操作的压力,前提是这些操作要满足没有要求即时反应,因为其不适合用在要求即时反应的需求,此时可以考虑使用缓存中间件Redis、Memcache等,另外,RabbitMQ主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。
activeMQ
属于java中JMS的实现。
JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。
ConnectionFactory 是连接工厂,负责创建Connection。
Connection 负责创建 Session。
Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。
Destination 是消息的目的地。
redis
golang版本的消息队列
goczmp(https://github.com/zeromq/goczmq)
本质上goczmq是一个zeromq,上层是c语言构建的api,golang调用c code实现了golang版本。