此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.4.0! |
集成图
从版本 4.3 开始, Spring 集成提供了对应用程序的运行时对象模型的访问,该模型可以选择包括组件度量。
它以图表的形式公开,可用于可视化集成应用程序的当前状态。
该包包含收集、构建和呈现 Spring 集成组件的运行时状态所需的所有类,作为单个树状对象。
应该将 声明为 bean 来构建、检索和刷新对象。
生成的对象可以序列化为任何格式,尽管 JSON 在客户端解析和表示起来很灵活和方便。
仅具有默认组件的 Spring 集成应用程序将公开一个图形,如下所示:o.s.i.support.management.graph
Graph
IntegrationGraphServer
Graph
Graph
{
"contentDescriptor" : {
"providerVersion" : "6.3.7-SNAPSHOT",
"providerFormatVersion" : 1.2,
"provider" : "spring-integration",
"name" : "myAppName:1.0"
},
"nodes" : [ {
"nodeId" : 1,
"componentType" : "null-channel",
"integrationPatternType" : "null_channel",
"integrationPatternCategory" : "messaging_channel",
"properties" : { },
"sendTimers" : {
"successes" : {
"count" : 1,
"mean" : 0.0,
"max" : 0.0
},
"failures" : {
"count" : 0,
"mean" : 0.0,
"max" : 0.0
}
},
"receiveCounters" : {
"successes" : 0,
"failures" : 0
},
"name" : "nullChannel"
}, {
"nodeId" : 2,
"componentType" : "publish-subscribe-channel",
"integrationPatternType" : "publish_subscribe_channel",
"integrationPatternCategory" : "messaging_channel",
"properties" : { },
"sendTimers" : {
"successes" : {
"count" : 1,
"mean" : 7.807002,
"max" : 7.807002
},
"failures" : {
"count" : 0,
"mean" : 0.0,
"max" : 0.0
}
},
"name" : "errorChannel"
}, {
"nodeId" : 3,
"componentType" : "logging-channel-adapter",
"integrationPatternType" : "outbound_channel_adapter",
"integrationPatternCategory" : "messaging_endpoint",
"properties" : { },
"output" : null,
"input" : "errorChannel",
"sendTimers" : {
"successes" : {
"count" : 1,
"mean" : 6.742722,
"max" : 6.742722
},
"failures" : {
"count" : 0,
"mean" : 0.0,
"max" : 0.0
}
},
"name" : "errorLogger"
} ],
"links" : [ {
"from" : 2,
"to" : 3,
"type" : "input"
} ]
}
版本 5.2 弃用了旧指标,转而使用千分尺,如 Metrics Management 中所述。 旧版指标已在版本 5.4 中删除,将不再显示在图表中。 |
在前面的示例中,图形由三个顶级元素组成。
graph 元素包含有关提供数据的应用程序的常规信息。
可以在 Bean 上或在应用程序上下文环境属性中进行自定义。
框架提供了其他属性,并允许您将类似模型与其他源区分开来。contentDescriptor
name
IntegrationGraphServer
spring.application.name
graph 元素表示 graph 元素中节点之间的连接,因此,也表示源 Spring Integration 应用程序中的集成组件之间的连接。
例如,从 a 到 an with some 或从 an 到 a 。
为了方便起见并让您确定链接的用途,该模型包括 the attribute。
可能的类型包括:links
nodes
MessageChannel
EventDrivenConsumer
MessageHandler
AbstractReplyProducingMessageHandler
MessageChannel
type
-
input
:标识从端点、 或属性的方向MessageChannel
inputChannel
requestChannel
-
output
:从 、 或通过 或 属性到MessageHandler
MessageProducer
SourcePollingChannelAdapter
MessageChannel
outputChannel
replyChannel
-
error
: 从 on 或 to the through an property;MessageHandler
PollingConsumer
MessageProducer
SourcePollingChannelAdapter
MessageChannel
errorChannel
-
discard
:从(例如 )到通过属性。DiscardingMessageHandler
MessageFilter
MessageChannel
errorChannel
-
route
:从 (例如 ) 到 . 类似于但在运行时确定。 可能是配置的 channel mapping 或动态解析的 channel。 为此,路由器通常最多只保留 100 个动态路由,但您可以通过设置该属性来修改此值。AbstractMappingMessageRouter
HeaderValueRouter
MessageChannel
output
dynamicChannelLimit
可视化工具可以使用此元素中的信息来呈现 graph 元素中节点之间的连接,其中 和 数字表示链接节点属性中的值。
例如,该元素可用于确定目标节点上的适当值。nodes
from
to
nodeId
link
port
下面的 “text image” 显示了类型之间的关系:
+---(discard) | +----o----+ | | | | | | (input)--o o---(output) | | | | | | +----o----+ | +---(error)
graph 元素可能是最有趣的,因为它的元素不仅包含运行时组件及其实例和值,还可以选择包含组件公开的度量。
Node 元素包含各种属性,这些属性通常一目了然。
例如,基于表达式的组件包括包含组件的主表达式字符串的属性。
要启用指标,请将 添加到 类 或将元素添加到 XML 配置中。
有关完整信息,请参阅 Metrics and Management。nodes
componentType
name
expression
@EnableIntegrationManagement
@Configuration
<int:management/>
这表示一个唯一的增量标识符,以便您区分一个组件和另一个组件。
它还在元素中用于表示此组件与其他组件的关系(连接)(如果有)。
的 and 属性用于 、 、 或 的 和 属性。
有关更多信息,请参阅下一节。nodeId
links
input
output
inputChannel
outputChannel
AbstractEndpoint
MessageHandler
SourcePollingChannelAdapter
MessageProducerSupport
从版本 5.1 开始, 接受 for for 特定 .
例如,您可以将 and 属性公开到目标图中:IntegrationGraphServer
Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
IntegrationNode
NamedComponent
SmartLifecycle
autoStartup
running
server.setAdditionalPropertiesCallback(namedComponent -> {
Map<String, Object> properties = null;
if (namedComponent instanceof SmartLifecycle) {
SmartLifecycle smartLifecycle = (SmartLifecycle) namedComponent;
properties = new HashMap<>();
properties.put("auto-startup", smartLifecycle.isAutoStartup());
properties.put("running", smartLifecycle.isRunning());
}
return properties;
});
Graph 运行时模型
Spring 集成组件具有不同的复杂程度。
例如,任何轮询的 a 和 a 都会定期从源数据向其发送消息。
其他组件可能是中间件请求-回复组件(例如 ),其中 consume 用于订阅(或轮询)() 以获取消息,以及 () 用于生成回复消息以发送到下游。
同时,任何实现(例如 )都会包装一些源协议侦听逻辑,并将消息发送到 .MessageSource
SourcePollingChannelAdapter
MessageChannel
JmsOutboundGateway
AbstractEndpoint
requestChannel
input
replyChannel
output
MessageProducerSupport
ApplicationEventListeningMessageProducer
outputChannel
在图中, Spring 集成组件通过使用类层次结构来表示,您可以在包中找到该层次结构。
例如,您可以将 用于 (因为它有一个选项),并且在使用 时可能会产生错误。
另一个示例是 — for a 当使用 .IntegrationNode
o.s.i.support.management.graph
ErrorCapableDiscardingMessageHandlerNode
AggregatingMessageHandler
discardChannel
PollableChannel
PollingConsumer
CompositeMessageHandlerNode
MessageHandlerChain
SubscribableChannel
EventDrivenConsumer
(请参见消息网关)为其每个方法提供节点,其中属性基于网关的 Bean 名称和短方法签名。
请考虑以下网关示例:@MessagingGateway name |
@MessagingGateway(defaultRequestChannel = "four")
public interface Gate {
void foo(String foo);
void foo(Integer foo);
void bar(String bar);
}
前面的网关生成类似于以下内容的节点:
{
"nodeId" : 10,
"name" : "gate.bar(class java.lang.String)",
"stats" : null,
"componentType" : "gateway",
"integrationPatternType" : "gateway",
"integrationPatternCategory" : "messaging_endpoint",
"output" : "four",
"errors" : null
},
{
"nodeId" : 11,
"name" : "gate.foo(class java.lang.String)",
"stats" : null,
"componentType" : "gateway",
"integrationPatternType" : "gateway",
"integrationPatternCategory" : "messaging_endpoint",
"output" : "four",
"errors" : null
},
{
"nodeId" : 12,
"name" : "gate.foo(class java.lang.Integer)",
"stats" : null,
"componentType" : "gateway",
"integrationPatternType" : "gateway",
"integrationPatternCategory" : "messaging_endpoint",
"output" : "four",
"errors" : null
}
你可以使用这个层次结构来解析 Client 端的图形模型,以及了解一般的 Spring Integration 运行时行为。
有关更多信息,另请参阅编程提示和技巧。IntegrationNode
版本 5.3 引入了一个抽象,所有代表企业集成模式 (EIP) 的开箱即用组件都实现了这个抽象并提供一个枚举值。
此信息对于目标应用程序中的某些分类逻辑非常有用,或者,如果公开到图形节点中,则 UI 可以使用此信息来确定如何绘制组件。IntegrationPattern
IntegrationPatternType