目录
1.系统集成模式的定义
在系统集成中把经常重复遇到的一些具体问题经抽象之后得到的共同点所归纳总结出来的一个个系统之间相互作用模式称为系统集成模式。
2.六大技术环节中系统集成模式的归类
![](https://i-blog.csdnimg.cn/blog_migrate/aa03d7e0dedceb11df28d9f73285d51c.png)
3.消息传递
3.1.什么是消息传递
系统间的数据交换以格式化的消息(message)为单位,利用标准的消息协议,把消息从发送者传递到接受者。
消息从发送者传递到接收者的方式有两种。一种方式称为即时消息传递,也就是说消息从一端发出后(消息发送者)立即就可以达到另一端(消息接收者);另一种方式称为延迟消息传递,即消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端。 这个容器的一种具体实现就是消息队列。
3.2.消息传递的优点
发送端和接收端的系统解耦,得以各自独立地进行演变,提高整个系统的稳定性和可控性。
3.3.主题与队列在消息传递中的区别
主题模式中同一条消息发出去后有几个接收端可以接收到这个消息,队列模式中特定的一条消息只能被唯一的一个接收端收到并进行处理。
![](https://i-blog.csdnimg.cn/blog_migrate/cfd0c552e116b856099057d474477d06.png)
3.4.消息传递中存储-传送的细节
A.消息源将消息发送到消息服务器
1.传送模式(DeliveryMode)
- 持久化(PERSISTENT):默认方式,消息服务器会先在消息存储中保存当前这条消息,然后才回复消息源,确认消息收到。只有当消息存储的硬件设备(比如共享文件或数据库)被毁坏后消息才会丢失。
- 非持久化(NON-PERSISTENT):消息服务器根本不会储存当前这条消息,而是直接回复消息源,确认消息收到。
2.存储模式
- 同步:消息服务器会在消息存储的操作完成之后才回复消息源。确保了消息源收到确认时当前消息的确已经妥善的存入了消息存储中,但是是单线程操作,效率差。
- 异步:消息服务器在启动消息存储的同时立即回复消息源。效率较高,但是存在消息存储出现故障而消息源却收到了确认的情形,造成消息丢失,消息目标再也无法对其进行重新处理。
B.消息服务器将消息发送到消息目标
确认模式(AcknowledgeMode):消息目标如何在接收到消息后向消息服务器进行确认。
- AUTO_ACKNOWLEDGE:消息目标一端的消息接收应用程序中MessageConsumer的receive()调用或MessageListener的onMessage()调用一旦结束,如果当前消息是PERSISTENT消息,服务器就会从消息存储中删除当前消息。至此,无论当前消息是PERSISTENT还是NON-PERSISTENT消息,在消息存储中当前消息都不再存在。
- CLIENT_ACKNOWLEDGE:由消息目标一端的消息接收应用程序来决定何时调用Message的acknowledge()。在acknowledge()调用之后,如果当前消息是PERSISTENT消息,服务器就会从消息存储中删除当前消息。至此,无论当前消息是PERSISTENT还是NON-PERSISTENT消息,在消息存储中当前消息都不再存在。
- DUPS_OK_ACKNOWLEDGE:与AUTO_ACKNOWLEDGE类似,只是采用DUPS_OK_ACKNOWLEDGE消息确认模式的JMS Session上的消息接收端,并不针对每一条消息都自动向消息服务器发回一个确认消息,而是在收到了设定数目的消息之后或者在设定的时间间隔之后才发送一个确认消息,对所有尚未确认的消息进行统一确认。这种方式提高了整体消息发送的效率,但有可能消息服务器由于没有及时收到某些确认消息而重发消息的情形,最终造成消息接收端的应用程序重复收到同一条消息。
4.消息服务器的容错性和高可用性
1.容错性:指一个系统在部件发生故障和失效的情况下,能够继续运行、发挥作用。
2.高可用性:指在很长的时间段内保证系统总体能够保持特定的运行性能水平。高可用性通常用“正常运行时间”来衡量。
3.消息服务器的两种配置
![](https://i-blog.csdnimg.cn/blog_migrate/f4d83b40960479b416e830e338519a94.png)
- 容错配置
a.消息服务器A和消息服务器B互相指定对方为自己的备份;
b.两个服务器都在运行,但只有主服务器可以正常地接收和发送消息;
c.主服务器定时向副服务器发送心跳消息,如果副服务器在设定时间间隔内没有收到主服务器的心跳消息,就认为主服务器已经停止运行,并将自己从等待状态转入正常运行状态;
d.因故障停止运行的原服务器在修复后重启时会成为副服务器。
存在的问题:如果服务器A还没来得及将所有的消息都送出去就出现故障停机了,服务器B接收成为主服务器继续运行,但滞留在服务器A的消息存储中的消息只要服务器B在主服务器的角色上一直运行就无法送出,因为即使服务器A在修复之后重新启动,也只能作为副服务器运行。
- 高可用性配置
a.两个消息服务器共享一个消息存储;
b.当多个程序过程企图同时访问存储设备时,只有一个过程能够成功地访问存储设备。“排他性的锁定”机制来实现;
c.进入主服务器满足两个条件:1.接收不到另一个消息服务器的心跳消息;2.成功地拿到消息存储设备上排他性的锁。
优点:不会出现消息滞留的情况。
5.分级式事件驱动架构(SEDA)
![](https://i-blog.csdnimg.cn/blog_migrate/837fe20cd4c40b70c865abb2b7733dd4.png)
这样设计的目的:
- 如果复杂的业务消息处理过程中某一阶段比较耗时,可能出现业务消息的处理全部被堵在这个阶段的情况。如果将这一段逻辑放在处于相邻的两个队列之间的应用程序中,就可以通过增加这个应用程序的数目来分担这段复杂逻辑之前的队列中的消息负荷,从而加快整体上的处理效率。
![](https://i-blog.csdnimg.cn/blog_migrate/17470fa40aa58c9215f1dd520e64cb92.png)
- 在一段业务处理之后将消息放入下一个队列,实际上是对该段业务处理之后的业务数据状态进行了存储。
![](https://i-blog.csdnimg.cn/blog_migrate/9024604d312f16a17c83e2d987bc8b9a.png)
6.消息搭桥
1.系统集成两种基本组成结构
![](https://i-blog.csdnimg.cn/blog_migrate/e2064f2cf0b5611033680dcab0bba567.png)
- 总线式
- 中心辐射式
2.消息搭桥
所有的在各个地方连接在不同消息服务器中同名队列上的消息源和消息目标的应用,就仿佛都连接在同一个消息服务器上一样。
原因:消息目标到消息服务器之间的连接由于可能需要垮不同的局域网,连接的稳定性会受到影响,从而因频繁的业务消息及确认消息传送的故障而降低整个系统的可靠性。
意义:使得消息在复杂的集成基础设施结构中传播范围得以很直观地进行设计、控制和理解。当公司的业务、组织结构发生调整时,大多数情形下可以通过对消息映射/搭桥的重新配置,以便在系统集成基础设施上完成相应的调整。
![](https://i-blog.csdnimg.cn/blog_migrate/bba9aba444887c7c0e146ccc39705108.png)
![](https://i-blog.csdnimg.cn/blog_migrate/340b07c5f92ae320a538bceace9ba43c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/201ad9aab204ef0e3bb4d32d49f0ed46.png)
本文中用到的图片的原Visio文件: