消息中间件
消息中间件(message Queue Middleware,简称MQ)指利用高效可靠的消息传递机构进行与平台无关的数据交流,并基于数据通信来进行分布式的系统集成。一般有两个传递方式:点对点与发布/订阅。
目前开源的消息中间件有很多,比较主流的有RabbitMQ,Kafka,ActiveMQ,RockectMQ等。
本文主要介绍RabbitMQ基础知识
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
应用场景:
它的应用场景又是什么?解决什么问题
解耦、异步、通信、削峰
你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?你是否遇到过秒杀活动的剧增访问导致系统宕机?
消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题;你也可以把它用于系统间服务的相互调用(RPC)通过使用消息队列;我们可以异步处理请求,从而缓解系统的压力。
基础概念:
- Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输。
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。一般来说发布者都是把消息发送到这里,由它来按定好的规则路由到具体的队列中。
- Queue:消息的载体,每个消息最终都会被投到一个或多个队列或者丢弃,消费里直接从这里中获取消息。
- Binding:它的作用就是把exchange和queue按照路由规则绑定起来,指设置交换器的路由规则。binding key:在设置路由规则的同时,一般会指定一个binding key,在消息发布时作用,匹配消息发布的key值进行路由。。
- Routing Key:消息发布时指定一个key值,用于指定消息最终路由到哪一个队列中。
- vhost:虚拟主机
路由规则 :ExchangeType:
- fanout:路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。
- direct: 路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。
- topic:与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中. binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)
- headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
消息投递:由生产者(P)投递到Exchange(X),由交换器Exchange(X)根据规则路由到相应的Queue进行存储。
消息消费:由消费者(C1\C2)从Queue获取消息进行消费。
下一章介绍RabbitMQ安装与配置。