我应该使用哪个UML图来记录使用EIP的消息驱动系统架构?

我应该使用哪个UML图来记录使用EIP的消息驱动系统架构?,uml,eip,Uml,Eip,我想使用UML来绘制我的系统的消息驱动架构的高级图 我正在努力找出正确的图表来绘制一个通过消息通道交换消息的EIP微服务系统 哪种UML图最适合于此?来自enterpriseintegrationpatterns.com的介绍: EAI的UML概要文件[UMLEAI]丰富了 协作图用于描述组件之间的消息流。 此符号非常有用,可以精确直观地描述 系统,可作为代码生成的基础,作为 模型驱动架构(MDA) 在UML2中,协作图被替换为 然而,enterpriseintegrationpatterns.

我想使用UML来绘制我的系统的消息驱动架构的高级图

我正在努力找出正确的图表来绘制一个通过消息通道交换消息的EIP微服务系统


哪种UML图最适合于此?

来自enterpriseintegrationpatterns.com的介绍:

EAI的UML概要文件[UMLEAI]丰富了 协作图用于描述组件之间的消息流。 此符号非常有用,可以精确直观地描述 系统,可作为代码生成的基础,作为 模型驱动架构(MDA)

在UML2中,协作图被替换为


然而,enterpriseintegrationpatterns.com的介绍接着说:

我们决定不采用这种符号。。。{因为}……UML 概要文件没有捕获模式中描述的所有模式 语言


在撰写本文的当前时间(2019年4月),UML的EAI概要文件的最后一次发布时间似乎是。这早于enterpriseintegrationpatterns.com的摘录,根据WayBack机器首次发布的说法


这表明UML2不适合描述包含EIP的消息驱动系统架构。

您可以使用组件图和/或复合结构图。在您的例子中,如果每个微服务只实例化一次,那么您只需要这些图中的一个。否则,最好让组件图显示类级别,让复合结构图显示实例级别。见问题


消息队列可以建模为具有原型的单独组件,或者建模为具有原型的接口。如果队列不属于一个服务,那么将队列建模为单独的组件是最佳选择。但是,如果它是自有的(只有一个服务在其上放置/发布消息),那么一个单独的队列组件会使图表混乱,最好将其建模为一个接口,由消息生产者提供,并由消息消费者所需。

当你说EIP时,我假设你指的是企业集成模式,例如,企业应用程序集成的各种模式集合,如消息路由器、消息代理、消息通道、服务调用等,如一些流行书籍和论文中所述。如果是这种情况,那么您对消息通道模式的引用是有意义的,我想我理解您的意思


UML是一种通用语言集,可以用来表示体系结构的许多不同方面,因此问题的答案取决于您试图显示的内容以及抽象级别。如果您的重点是消息传递(消息定时、排序等),那么您需要在UML中使用一种行为语言;如果您想表示消息(结构、类型、内容等),那么可以使用结构化语言来表示。8bitjunkie的答案建议在行为方面使用沟通图,但您也可以根据您的重点/需要使用序列图、活动图和状态图。序列图允许您比通信图更清楚地识别时序方面。对于消息结构,我建议使用类图。UML还可以通过标记值和原型进行扩展,以包含更大的特殊性,并添加结构化细节(如果您愿意);您可以在UML模型中捕获的结构化信息没有真正的限制。

在接口中定义信号接收。感谢您的建议。然而,信号不是一种事件,而是一种媒介吗?我希望能够绘制微服务以及它们发布和订阅的消息通道。因此,您可以将端口连接在一起。您是指组件图上组件之间的端口吗?将消息通道绘制为中介组件在语义上是否有效?我所发现的最接近的是这个,它直接连接微服务行为/结构语言是不对的。UML是一种语言。行为/结构只是语言中的句子。用成语图表就可以了。很公平,这是真的。我(试图)在这里要传达的是,您可以使用UML对行为和结构问题进行建模,并且可以使用UML轻松地对EIP进行建模。最初,UML的“语言”来源于几个来源/作者,因此我的解释是——根据当时的记忆——UML由其他语言组成。是的,你说得对。enterpriseintegrationpatterns.com只是两位想卖掉书的作者。从我过去从企业看到的情况来看,没有这样的事情。每个企业都是独立的(有充分的理由)。在企业中整合任何东西都不是一本书能涵盖的。使用来自(某种程度上)标准化团队的UML,只是一种开放的方法(对我来说总是很适合)。我的2美分。