Resolving problems when you use callable flow nodes

Diagnose problems with callable flows by validating messages and running commands.

Before you begin

Read the concept information in Callable message flows.

About this task

If problems occur when you develop callable flows, complete the following checks.

For callable flows that are split between IBM App Connect Enterprise and IBM App Connect Enterprise as a Service:

Validate messages before they reach the CallableFlowInvoke node

About this task

The CallableFlowInvoke node parses the incoming message in full so that it is in a suitable format to send to the CallableInput node. Therefore, you must validate the message before it reaches the CallableFlowInvoke node. If the call fails due to a parsing failure, the message is rolled back with an exception.

Binary Large Object (BLOB) messages do not need to be parsed. Therefore, if you do not want to parse the message data before the CallableFlowInvoke node, you can send data to the callable flow by using the BLOB parser.

Ensure that application and endpoint name pairs are unique on a single integration server

About this task

Application and endpoint name pairs must be unique on a single integration server. You can have multiple callable flows that share the same application and endpoint names, but they must be in different integration servers. In this case, the Switch server acts as a load balancer.

Similarly, if you are splitting processing between App Connect Enterprise and App Connect Enterprise as a Service, any callable flows with the same application and endpoint names must be in different integrations in the cloud.

Check that the Switch server is running

About this task

The Switch server is a special integration server that runs in a special integration node called ACESWITCH_NODE_V12. This server routes data between your callable flows. You cannot deploy anything to this server. If your callable flows are deployed to different integration servers, you run the iibcreateswitchcfg command to create configuration files for the Switch server and for the agents that enable your flows to use the Switch server securely. You run the iibswitch command to create and start the Switch server by using the generated configuration file (switchserver.json).

After you run the iibswitch command, check that the Switch server is created and running by using the mqsilist command:
mqsilist ACESWITCH_NODE_V12
If the Switch server is running, you see the following response:
BIP1286I: Integration server 'ACESWITCH_SERVER' on integration node 'ACESWITCH_NODE_V12' is running.

For more information about the mqsilist command, see mqsilist command

If the Switch server is stopped, start it by running the following command:
iibswitch start
If the Switch server is not created, run the following commands:
iibcreateswitchcfg /output filepath
iibswitch create switchserver /config filepath\switchserver.json

For more information about the iibswitch command, see iibswitch command.
For more information about the iibcreateswitchcfg command, see iibcreateswitchcfg command.

Determine the status of the switch server for callable flows

About this task

You can view the status of the switch server by running the following command (do not replace ACESWITCH_NODE_V12 or ACESWITCH_SERVER with the name of an integration node or integration server):

mqsireportproperties ACESWITCH_NODE_V12 -e ACESWITCH_SERVER -o ComIbmIIBSwitchManager -r

The output of this command also includes details of the callable flows that have are registered in this switch server, and the details of the callable flow invoke nodes that have are registered in this switch server. For more information about the mqsireportproperties command, see mqsireportproperties command.

Check that your callable flows are registered

About this task

The mqsireportproperties command lists the calling and callable flows that are registered for a specified integration server. Run the following mqsireportproperties command for each integration server:
mqsireportproperties integrationNodeName -e integrationServerName -o CallableFlowManager -r
The following example shows a typical response:
callable-flow-manager
  name='CallableFlowManager'
  identifier='CallableFlowManager'
  type='CallableFlowManager'
  delayReplyUntilFlowCommit='false'
  disableRemoteInputRegistration='false'
  redeployMessageTimeout='5'
  remoteRetryTimeout='60'
  retryLocalDuringDeploy='true'
  retryRemoteUntilTimeout='true'
  detailed
    registrations
      callableFlow
        applicationName='app2'
        endpointName='callableEndpoint1'
        inputNodeRegistered='0x0000000006AF8480'
        invokeNodeCount='1'
        queueDepth='0'
      callableFlow
        applicationName='app4'
        endpointName='callableEndpoint2'
        inputNodeRegistered='0x0000000000000000'
        invokeNodeCount='1'
        queueDepth='0'

A message flow that calls a callable flow contains a CallableFlowInvoke node. Therefore, if a calling flow is deployed to the server, the invoke node count is 1. The mqsireportproperties command also specifies the application name and endpoint name that the calling flow is using to call the callable node.

A callable flow contains a CallableInput node. If a callable flow is deployed to the server, the inputNodeRegistered value is greater than zero. The mqsireportproperties command also specifies the name of the application that contains the callable flow, and the endpoint name that is set on the CallableInput node of the callable flow.

If both the calling and the callable flow are deployed to the same integration server, the invokeNodeCount value is 1, and the inputNodeRegistered has a value that is greater than zero. In the example, the inputNodeRegistered value indicates that a callable flow with an endpoint name of callableEndpoint1 is deployed to this server in an application called app2. The invokeNodeCount value of 1 indicates that the flow that calls this callable flow is also deployed to this server. However, the inputNodeRegistered value is zero for the callable flow in application app4 with an endpoint name of callableEndpoint2, but the invoke node count is 1. Therefore, the calling flow is deployed to this server, but the callable flow is not.