异构平台之间通信困难:
windows平台下的应用程序与linux平台下的应用程序之间通信,大型机与小型机之间的通信;
异构系统之间通信困难:
如用phython编写的应用系统与用java编写的应用系统之间通信,不同语言的通信实现可能很不一样,如果要实现
两者之间的通信就可能使用适配器或ws等其它方法来实现
网络不稳定:
如果两个系统之间通信,但是系统之间的网络断断续续,则很难保证信息能安全传递给对方系统,这时,系统就必须具有重传机制;
异步:
如果两个系统之间传递的数据不是时时的,那么它们之间的通信就不应该是同步的,以免导致后面的操作一直等待通信结束后才能进行。但传统的系统的方式(如java中的socket)又很难实现异步通讯;
以上问题用一句话来说就是:网络通讯问题;
以上问题,都可以自己用编程的方式解决,但做为应用系统开发者,不应该在网络通讯上花费过多的精力和时间。
而MQ就是以上通讯问题的一个通用解决方案;
对于异构平台或异构系统而言:mq充当了类似java虚拟机的作用。它实现了不同平和语言的不同版本,却给我们提供一个统一的接口。
对于网络不稳定的问题:mq实现了消息重传机制,它可以在网络相通时自动重传。它实现了类似java中的带有重传机制的socket功能。
对于异步问题:mq实现了缓存机制和事件触发机制。发送方先把消息发向缓存,然后继续完成后续操作,而无需等待接收方的确认。在消息到达接收方后,自动触发消息事件,以触发接收的处理功能。
解决异构通讯:无论是异构平台还是异构系统都不必关心它们之间如果通讯,只需用自己熟悉的方式或编程语言或风格,通过mq提供的统一api,与mq通讯就够了。而异构平台/系统之间如何通讯由mq来实现。它起到转换器的作用。
解决网络传输问题:无论是网络不稳定还是网络中的其它问题,对就应用系统的开发都不需要关心,mq可以在网络正常的情况下自动传输数据,而且可以保证在一次传输失败后能自动重新传递,确保数据最可能少的丢失。
解决异步问题:通过缓存来实现异步传输。因为系统直接与mq通讯,所以只要进入缓存,系统的一方就认为通讯结束。当然缓存也是保证网络传输的必要条件。
一句话总结:mq就是解决通讯问题的解决方案;
从java角度总结
一句话: 一个升级版的socket,一个带缓存的socket,一个把socket功能极致化的软件