消息中间件是用于应用程序之间进行通信,系统通过消息传递完成交互。
消息中间件的主要特点有以下几个:
1、分布式:消息中间件都是分布式的,因此才可以提供异步、解耦等功能。
2、可靠性:基于消息的通信是可靠的,消息不会丢失。大多数消息中间件都提供将消息持久化到磁盘的功能。
3、 异步:通过消息中间件,可将远程同步调用拆解成为异步调用。对于不需要获取远程调用结果的应用场景来说,性能提升明 显。
4、松耦合:消息直接由中间件存储和分发。消息生产者只需关注如何将消息发送给消息中介服务器;消费者只需关注如何从中介服务器订阅。生产者和消费者之间是完全解耦的,不需要知道彼此的存在。
5、事件驱动:可以将复杂的应用系统重构成为事件驱动的系统。事件溯源(Event Sourcing),表示一个对象从创建到消亡,会经过的多种状态。如果把对象的状态变化都存储下来,不但可以根据状态变化记录获取对象的当前状态,也可以回溯对象的变化过程。消息中间件能很好地支持这样的系统设计方式,将触发对象状态变化的事件放入消息队列。
同样,一个消息中间件也有一些值得思考的问题:
1、分布式带来的复杂性:消息中间件都是分布式的,引入分布式会大大增加系统复杂度,在不同主机、不同进程之间的调用和调试,会带来更多的不稳定性。分布式系统还会增加对外部系统的依赖。即使自己的系统没有问题,也可能会因为依赖系统出问题而导致系统不稳定。因此,Martin Fowler曾说:分布式调用的第一原则就是不要分布式。
2、同步调用应该考虑其他方式:尽管消息中间件也可用于同步调用,但这并不是它的长项,同步调用可以考虑使用HTTP、NIO等其他方式。