第二十五章 开发Productions - ObjectScript Productions - 发送请求消息

发送请求消息

在业务服务类中, OnProcessInput() 实现应该将请求消息发送到生产中的某个目的地。为此,根据需要调用业务服务类的以下实例方法之一:

  • SendRequestSync() 同步发送消息(等待响应)。有关详细信息,请参阅使用 SendRequestSync() 方法。
    - SendRequestAsync() 异步发送消息(不等待响应)。有关详细信息,请参阅使用 SendRequestAsync() 方法。
  • SendDeferredResponse() 发送之前延迟的响应。这种方法不太常用。有关详细信息,请参阅使用 SendDeferredResponse() 方法。

这些方法中的每一个都返回一个状态,一个 %Status 的实例。

这些方法也在 Ens.BusinessProcessEns.BusinessOperation 中定义——具有相同的方法签名,尽管它们的内部结构在这些类中是不同的。这意味着可以从业务流程和业务操作类中调用这些实例方法。

使用 SendRequestSync() 方法

要发送同步请求,请使用 SendRequestSync() 方法,如下所示:

  Set tSC = ..SendRequestSync(pTargetDispatchName, pRequest, .pResponse, pTimeout)
  • pTargetDispatchName — 请求发送到的业务流程或业务操作的配置名称。
  • pRequest — 请求消息。请参阅定义消息。
  • pResponse —(引用)响应消息。该对象接收响应返回的数据。
  • pTimeout —(可选)等待响应的秒数。默认值为 –1(永远等待)。

此方法返回状态,中 %Status 的实例。

如果不需要响应,可以使用 SendRequestAsync() 而不是 SendRequestSync()

使用 SendRequestAsync() 方法

要发送异步请求,请使用 SendRequestAsync() 方法,如下所示:

  Set tSC = ..SendRequestAsync(pTargetDispatchName, pRequest)
  • pTargetDispatchName — 请求发送到的业务流程或业务操作的配置名称。
  • pRequest — 请求消息。请参阅定义消息。

使用 SendDeferredResponse() 方法

所有业务主机都支持 SendDeferredResponse() 方法。该方法允许业务主机参与生产延迟响应机制。业务主机识别先前延迟的请求,创建实际响应消息,并将此响应发送到发起请求的业务主机。请参阅 IRIS 编程中的使用延迟发送。

本主题描述业务服务在此机制中的作用。假设传入事件与延迟响应令牌一起到达生产,并假设此事件的到达点是业务服务。然后,此业务服务调用 SendDeferredResponse() 来创建响应并将其定向到发起请求的调用方。 SendDeferredResponse()`` 调用如下所示:

   Set sc = ..SendDeferredResponse(token, pResponseBody)
  • token — 标识延迟响应的字符串,以便调用者可以将其与原始请求匹配。业务服务通过生产特有的某种机制获取令牌字符串。

例如,如果外部目的地是电子邮件,当发送一个它愿意接收延迟响应的请求时,业务操作可以在外发电子邮件的主题行中包含令牌字符串。接收此电子邮件的实体可以从请求主题行中提取此令牌,并在响应主题行中使用它。这会保留令牌,以便接收响应电子邮件的业务服务可以在后续调用 SendDeferredResponse() 时使用它。

  • pResponseBody — 响应消息。该对象接收响应返回的数据。请参阅定义消息。

每个调用间隔仅处理一个事件

如果希望业务服务在每个调用间隔只处理一个事件,请在 OnProcessInput() 实现中将 %WaitForNextCallInterval 属性设置为 1(真):

 set ..%WaitForNextCallInterval=1

这将业务服务限制为每个 CallInterval 仅处理一个输入事件,即使存在多个输入事件也是如此。

此信息适用于使用具有名为 CallInterval 的属性并将该属性用作轮询间隔的适配器的业务服务。

06-05 12:35