文章目录
第二十五章 开发Productions - ObjectScript Productions - 发送请求消息
发送请求消息
在业务服务类中, OnProcessInput()
实现应该将请求消息发送到生产中的某个目的地。为此,根据需要调用业务服务类的以下实例方法之一:
SendRequestSync()
同步发送消息(等待响应)。有关详细信息,请参阅使用SendRequestSync()
方法。
-SendRequestAsync()
异步发送消息(不等待响应)。有关详细信息,请参阅使用SendRequestAsync()
方法。SendDeferredResponse()
发送之前延迟的响应。这种方法不太常用。有关详细信息,请参阅使用SendDeferredResponse()
方法。
这些方法中的每一个都返回一个状态,一个 %Status
的实例。
这些方法也在 Ens.BusinessProcess
和 Ens.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
的属性并将该属性用作轮询间隔的适配器的业务服务。