了解什么时候使用RabbitMQ

人们如何作出决定?在平常生活中,情绪每每是第一动力。但当人们须要承担长期后果时,不可能纯靠冲动行事。聪明者只会在内心有数后才会靠直觉作出决定。node

现在市场上有数十种发送消息的技术,无数ESB和近100家iPaaS供应商。固然,如何挑选就成为了一个问题。须要批发一堆技术吗?仍是对症下药?那么,正确的工具应该是什么?安全

这篇文章正是想给那些“无头苍蝇”们一些简单直接的建议,就从现在最时尚最受欢迎的RabbitMQ开始吧!二者都有本身的起源故事,设计意图,闪光点,集成功能和开发人员的切身体验。起源揭示了本软件的总体设计意图o。重要的是,本文中的目的是比较二者围绕消息中介的重叠用例,而不是Kafka擅长的“事件存储/事件源”用例。服务器

 

229.png

起源异步

RabbitMQ是一个“传统”消息中介,能够实现各类消息传递协议。它是首批实现大量功能,客户端库,开发工具和质量文档的开源消息中介之一。RabbitMQ最初是为实现开放式线路协议AMQP而开发的。虽然Java具备像JMS这样的消息传递标准,但它对于须要分布式消息传递的非Java应用程序没有帮助,由于它严重限制了集成场景,微服务。随着AMQP的出现,跨语言的灵活性成为开源消息中介的真实存在。分布式

 

建筑与设计微服务

RabbitMQ做为通用的消息中介,采用点对点的方式,请求/回复各种通讯样式。它使用智能中介/ “沉默的消费者”模型,专一于向消费者提供一致的消息传递,消费者的消费速度与中介跟踪消费者状态的速度大体类似。RabbitMQ是成熟的,在获得正确配置时表现良好,获得不少支持(客户端库Java,.NET,node.js,Ruby,PHP和更多语言),而且有许多可用的插件能够将它扩展到更多的用例和集成场景。工具

RabbitMQ中的通讯能够根据须要同步或异步。发布者向中间站发送消息,消费者从队列中检索消息。经过交换将生产者与队列分离,可确保生产者不会受到硬编码决策的影响。RabbitMQ还提供了许多分布式部署方案(而且确切要求全部节点都可以解析主机名)。能够将多节点群集设置为群集联合,而且不依赖于外部服务(但某些群集造成插件可使用AWS API,DNS,Consul等)。开发工具

 

要求和用例编码

RabbitMQ是一种通用的消息传递解决方案,一般用于容许Web服务器快速响应请求,而不是在用户等待结果时强制执行复杂的过程。它还能够将消息分发给多个接收者以供消费,或者在高负载(20k + / sec)下平衡负载。当您的需求超出吞吐量时,RabbitMQ可提供许多功能:可靠的交付,路由,联合,HA,安全性,管理工具和其余功能。让咱们来看看RabbitMQ的最佳场景,例如:插件

1. 您的应用程序须要使用现有协议的任意组合,如AMQP 0-9-1,STOMP,MQTT,AMQP 1.0。

2. 您须要基于每一个消息(死信队列等)进行更精细的一致性控制/保证。可是,Kafka最近添加了更优的支持。

3. 您的应用程序须要点对点,请求/回复、发布/订阅,具备消息传递的多样性

4. 至消费者复杂的路由,使用强大的路由逻辑集成多个服务/应用程序

5. 在其余软件的帮助下,RabbitMQ还能够有效地解决上面几个Kafka强大的用例。当应用程序须要访问流历史时,RabbitMQ一般与Apache Cassandra一块儿使用,对于须要“无限”队列的应用程序,RabbitMQ一般与LevelDB插件一块儿使用,但这两种功能都不附带RabbitMQ自己。

 

开发经验

RabbitMQ正式支持Java,Spring,.NET,PHP,Python,Ruby,JavaScript,Go,Elixir,Objective-C,Swift - 经过社区插件与许多其余客户端的devtools一块儿支持。RabbitMQ客户端库已经成熟而且文档齐全。

相关文章
相关标签/搜索