一、几个概念
1、SOA:(Service-Oriented Architecture)面向服务的分布式架构详解
简单的理解,我们可以把SOA看作是模块化的组件,每个模块都可以实现独立功能,而不同模块之间的结合则可以提供不同的服务,模块之间的接口遵循统一标准,可以实现低成本的重构和重组。在SOA的技术框架下,可以把杂乱无章的庞大系统整合成一个全面有序的系统,从而增加企业在业务发展过程中应用系统的灵活性,实现最大的IT资产利用率。
2、应用层模块(web)与业务层模块
我理解的是当交互什么到真正实现业务的模块之间的通信。
3、为什么要用MQ
在使用SpringCloud或Dubbo进行SOA架构后,不同的应用层模块(web)与业务层模块(service)要建立调用关系,也就是依赖/耦合
当模块变多时,模块间的耦合度也会逐步上升,这就需要一个解耦工具:消息中间件
另外,如果某个业务流程分为很多步,某一步特别耗时间且不稳定,整个业务的稳定性就会受很大影响,这时也需要用消息中间件来分离这些不稳定的业务过程
4、什么时候可以用MQ
执行过程长,且不需要返回结果的功能,可以利用MQ传递(MQ的异步通信特征)
5、MQ与JMS(java message service)的区别。
消息传递一般的两种方式:queue点对但(生产者与消费者一对一关系)
topic发布-订阅(生产者与消费者的一对多的关系)
JMS有五种消息格式:TextMessage(String)——普通文本(用得最多)
MapMessage(Map)——键值对集合(用的次多)
ObjectMessage(Serializable Object)——可序列化的对象
BytesMessage(byte[])——字节数组
StreamMessage(Stream)——流数据
JMSDE消息传递思路和观察者模式很像,是一对多的依赖关系,多个观察这同时监听同一个主题现象,发生改变时,会通知观察者对象并自动更新
但是mq是在生产者发送消息到mq,mq通知消费者,消费者可以自己决定,在适当的时间取出消息,取出时mq再把消息发给消费者。
现在常用的mq之间的对比: