消息队列mq

消息队列可以作为大型应用中各个组件间的连接。通过异步传递消息,1.可以有效地降低各部件之间的耦合度。2.缓存未处理的消息。

常用的有activemq,kafaka和rabbit mq。

acitive mq集群的配置可以基于,zookeeper,共享文件系统和数据库。

 

rabbitmq模型:

生产者将消息发送给exchanger,exchanger将消息发送给consumer。

使用默认exchanger时,一条消息被一个消费者消费,可以有多个消费者竞争消息。

exchanger模式为fanout时,支持广播。

exchanger模式为direct和topic支持,不同的路由key,消费者消费指定key的消息。但是两种类型的key的规则不同。direct使用于不同类型的消息,topic使用于不同部件发送的消息。举例来说,在日志系统中,借助direct模式下的key,可以区分info error等不同等级的消息;topic的key,使用于区分不同的class以及包发送的消息。

 

附:rabbitmq 集群的搭建方法。http://www.jianshu.com/p/db0f5496f0d2

 

kafka模型:

在kafka模型中,

1.与其他消息队列类似,生产者生产消息发送给kafka server(即broker)。可同时启动多个broker,组成集群。broker将消息再发送给消费者。

2.消息以topic为单位分类,生产者发送某个topic的消息,订阅了该topic的消费者才能收到该消息。

3.broker将每个topic的消息分为多个partition,生产者按照罗宾环等规则,将消息负载均衡地发送到各个partition中。

然后每个partition在把消息发送给消费者。消费者分为多个group,partition中的每条消息会分别向各个group发送一份。也就是说每条消息会向各个group广播。

但是每个group内只有一个消费者会消费该消息。

4.关于集群。多个kafka server实例组成集群。同一个topic的多个partition会分布在多个server实例上,同时每个partition可以在多个server实例上有备份。

某个patition会有一台leader server,负责其消息的接受和发送。leader挂了,就选举出备份server作为该partion的leader。

附:集群搭建方法:http://blog.csdn.net/suifeng3051/article/details/38321043

 

posted @ 2017-01-11 18:49  swaggyC  阅读(284)  评论(0编辑  收藏  举报