集成图

从版本 4.3 开始, Spring 集成提供了对应用程序的运行时对象模型的访问,该模型可以选择包括组件度量。 它以图表的形式公开,可用于可视化集成应用程序的当前状态。 该包包含收集、构建和呈现 Spring 集成组件的运行时状态所需的所有类,作为单个树状对象。 应该将 声明为 bean 来构建、检索和刷新对象。 生成的对象可以序列化为任何格式,尽管 JSON 在客户端解析和表示起来很灵活和方便。 仅具有默认组件的 Spring 集成应用程序将公开一个图形,如下所示:o.s.i.support.management.graphGraphIntegrationGraphServerGraphGraphspring-doc.cn

{
  "contentDescriptor" : {
    "providerVersion" : "6.4.0",
    "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 中删除,将不再显示在图表中。

在前面的示例中,图形由三个顶级元素组成。spring-doc.cn

graph 元素包含有关提供数据的应用程序的常规信息。 可以在 Bean 上或在应用程序上下文环境属性中进行自定义。 框架提供了其他属性,并允许您将类似模型与其他源区分开来。contentDescriptornameIntegrationGraphServerspring.application.namespring-doc.cn

graph 元素表示 graph 元素中节点之间的连接,因此,也表示源 Spring Integration 应用程序中的集成组件之间的连接。 例如,从 a 到 an with some 或从 an 到 a 。 为了方便起见并让您确定链接的用途,该模型包括 the attribute。 可能的类型包括:linksnodesMessageChannelEventDrivenConsumerMessageHandlerAbstractReplyProducingMessageHandlerMessageChanneltypespring-doc.cn

  • input:标识从端点、 或属性的方向MessageChannelinputChannelrequestChannelspring-doc.cn

  • output:从 、 或通过 或 属性到MessageHandlerMessageProducerSourcePollingChannelAdapterMessageChanneloutputChannelreplyChannelspring-doc.cn

  • error: 从 on 或 to the through an property;MessageHandlerPollingConsumerMessageProducerSourcePollingChannelAdapterMessageChannelerrorChannelspring-doc.cn

  • discard:从(例如 )到通过属性。DiscardingMessageHandlerMessageFilterMessageChannelerrorChannelspring-doc.cn

  • route:从 (例如 ) 到 . 类似于但在运行时确定。 可能是配置的 channel mapping 或动态解析的 channel。 为此,路由器通常最多只保留 100 个动态路由,但您可以通过设置该属性来修改此值。AbstractMappingMessageRouterHeaderValueRouterMessageChanneloutputdynamicChannelLimitspring-doc.cn

可视化工具可以使用此元素中的信息来呈现 graph 元素中节点之间的连接,其中 和 数字表示链接节点属性中的值。 例如,该元素可用于确定目标节点上的适当值。nodesfromtonodeIdlinkportspring-doc.cn

下面的 “text image” 显示了类型之间的关系:spring-doc.cn

              +---(discard)
              |
         +----o----+
         |         |
         |         |
         |         |
(input)--o         o---(output)
         |         |
         |         |
         |         |
         +----o----+
              |
              +---(error)

graph 元素可能是最有趣的,因为它的元素不仅包含运行时组件及其实例和值,还可以选择包含组件公开的度量。 Node 元素包含各种属性,这些属性通常一目了然。 例如,基于表达式的组件包括包含组件的主表达式字符串的属性。 要启用指标,请将 添加到 类 或将元素添加到 XML 配置中。 有关完整信息,请参阅 Metrics and ManagementnodescomponentTypenameexpression@EnableIntegrationManagement@Configuration<int:management/>spring-doc.cn

这表示一个唯一的增量标识符,以便您区分一个组件和另一个组件。 它还在元素中用于表示此组件与其他组件的关系(连接)(如果有)。 的 and 属性用于 、 、 或 的 和 属性。 有关更多信息,请参阅下一节。nodeIdlinksinputoutputinputChanneloutputChannelAbstractEndpointMessageHandlerSourcePollingChannelAdapterMessageProducerSupportspring-doc.cn

从版本 5.1 开始, 接受 for for 特定 . 例如,您可以将 and 属性公开到目标图中:IntegrationGraphServerFunction<NamedComponent, Map<String, Object>> additionalPropertiesCallbackIntegrationNodeNamedComponentSmartLifecycleautoStartuprunningspring-doc.cn

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 用于订阅(或轮询)() 以获取消息,以及 () 用于生成回复消息以发送到下游。 同时,任何实现(例如 )都会包装一些源协议侦听逻辑,并将消息发送到 .MessageSourceSourcePollingChannelAdapterMessageChannelJmsOutboundGatewayAbstractEndpointrequestChannelinputreplyChanneloutputMessageProducerSupportApplicationEventListeningMessageProduceroutputChannelspring-doc.cn

在图中, Spring 集成组件通过使用类层次结构来表示,您可以在包中找到该层次结构。 例如,您可以将 用于 (因为它有一个选项),并且在使用 时可能会产生错误。 另一个示例是 — for a 当使用 .IntegrationNodeo.s.i.support.management.graphErrorCapableDiscardingMessageHandlerNodeAggregatingMessageHandlerdiscardChannelPollableChannelPollingConsumerCompositeMessageHandlerNodeMessageHandlerChainSubscribableChannelEventDrivenConsumerspring-doc.cn

(请参见消息网关)为其每个方法提供节点,其中属性基于网关的 Bean 名称和短方法签名。 请考虑以下网关示例:@MessagingGatewayname
@MessagingGateway(defaultRequestChannel = "four")
public interface Gate {

	void foo(String foo);

	void foo(Integer foo);

	void bar(String bar);

}

前面的网关生成类似于以下内容的节点:spring-doc.cn

{
  "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 运行时行为。 有关更多信息,另请参阅编程提示和技巧IntegrationNodespring-doc.cn

版本 5.3 引入了一个抽象,所有代表企业集成模式 (EIP) 的开箱即用组件都实现了这个抽象并提供一个枚举值。 此信息对于目标应用程序中的某些分类逻辑非常有用,或者,如果公开到图形节点中,则 UI 可以使用此信息来确定如何绘制组件。IntegrationPatternIntegrationPatternTypespring-doc.cn