MQ(message queue)消息队列,主要解决不同进程/线程之间的通信。不同进程之间进行消息传递,两进程相互依赖耦合度高;为了隔离两个进程,可将消息传递环节抽离封装,一方面解耦合,另一方面可以将消息传递标准化规范化;同时通过设计解决消息过多,进程无法一下子处理完的情景,让消息排队传递。
目前比较流行的消息队列有:RabbitMQ、ActiveMQ、Kafka等,RabbitMQ是一个开源的基于AMQP(Advanced Message Queuing Protocol)的企业消息系统;ActiveMQ是JMS消息服务器,是Apache出品的,比较流行的开源消息总线;Kafka是一种高吞吐量的分布式发布订阅消息系统,通过o(1)的磁盘数据结构提供消息的持久化,可支持每秒10万消息,同时支持TB消息存储运行。
RabbitMQ的5种队列
1.简单模式
一个生产者,一个消费者,消息通过FIFO模式排队;
2.work模式
一个生产者,多个消费者,消费者接受到的消息是不同的;
普通的work模式采用轮询的方式向不同的消费者发送消息;
“能者多劳”的work模式采用回复确认机制,将消息置为手动确认模式,且将预置队列数为1(prefetchCount=1);一个消费者接收到一条消息,直到处理成功确认后才会收到第二条消息;即处理能力强的消费者将接收更多的消息。
3.订阅模式
一个生产者,一个交换机,多个队列,多个消费者,一个消息经过队列后只能被一个消费者获取,所以每个消费者都配备了队列;
生产者生成消息后,将由交换机分发到多个队列,队列再将消息传递给后方的消费者。一个消息可以被分发给多个消息队列,所以可以达到一个消息被多个消费者消费的目的。
4.路由模式
一个生产者,一个交换机,多个队列,多个消费者;与订阅模式类似,不同之处在于消息带有类型,不同的消费者可以订阅不同类型的消息;(消息可以自定义类型,例如“update”、“create”、“delete”、“audit.irs.corporate”等)
消息在经过交换机时,根据消息的类型进行路由,从而被分发到不同的队列中;
5.主题模式(通配符模式)
一个生产者,一个交换机,多个队列,多个消费者;与路由模式类似,不同之处在于,其可以通过简单通配符的方式进行消息路由,比如“#”表示所有消息类型,“*”表示单一词匹配;
例如:“audit.irs.corporate”消息,“audit.#”可以匹配到,但“audit.*”只能匹配“audit.irs”消息。