Apologies if too late but I tried the following based on the Non Persistence option used in the EnsLib.HTTP/REST/SOAP Generic classes (also see  Accelerate Ensemble)

1. Custom TCP Service Extends EnsLib.HL7.Service.TCPService:

Class Community.NonPersistService Extends EnsLib.HL7.Service.TCPService
{

Parameter SETTINGS = "PersistInProcData:Additional";

/// Persist data to operations with invocation InProc<br/>
/// The default is On. <br/>
/// This setting is only used if calling an operation with invocation InProc. <br/>
/// If this setting is off then no message headers will be created and message bodies will not be saved.<br/>
/// If this setting is off there will be no trace in the message viewer. <br/>
/// If this setting is off there will be no retry attempts by the operation - only one attempt will be made. <br/> 
Property PersistInProcData As %Boolean [ InitialExpression = 1 ];

Method OnInit() As %Status
{
    Set $$$EnsInProcPersist=..PersistInProcData
    Quit ##super()
}

}

2. Custom HL7 File Operation invoked InProc that is the target of the service

Class Community.InProcOperation Extends EnsLib.HL7.Operation.FileOperation
{

Parameter INVOCATION = "InProc";

}

Note the property description from EnsLib.HTTP.GenericService for PersistInProcData states for synchronous sends but this needs to be removed since not relevant for InProc. Sufficient that InProc target processed via OnMessage.

How about using Work Queue Manager framework in conjunction with a BS?

Pick up a message but do not delete before we start processing since we are not going to record anywhere permanently that we are working on it.
Check if message queued in current lifetime temp list.
If already queued skip.
If not already queued:
    mark as in progress for duration of this container lifetime
    queue up for Work Queue Manager to process.
    use callbacks to say finished and delete the message.perhaps also give back answer as well.
We then also have auto scaling using the WQM framework if I am not mistaken.

It is possible for a BS to have more than one job  - the issue becomes how to control the multi process access to the inbound feed in an orderly manner. Hence as you asked it is  important  to know how the BS is pulling data.

Eduard, Is the  rate at which one BS can process known or is it variable based on data unit to be processed? Similarly is the rate of arrival known or possible to detect? If possible to know these 2 rates they could be used to control BS count rather than CPU (a tight looping BS looking for work could skew CPU test comes to mind)

Is the design to have all the processing of a data unit in the BS rather than pass to a BP/BO?

James

NB: there is a variation on pool size meaning for a BS using TCP based listening adapter where there can only be one listener but when Job Per Connection is true pool size setting is used as the maximum allowed number of concurrent connections created by the listener.

Hi Murillo

While no UI exists to create a deployment file to specify host items to remove it is possible to use the APIs to create such a deployment file  - see the last example in the top section of the class documentation for Ens.Deployment.Utils. This is the same removal mechanism used when creating the rollback mechanism.

HTH

James

link at https://irisdocs.intersystems.com/irislatest/csp/documatic/%25CSP.Documa...

Hi Grace

I defer to those with experience in the field to offer comparative advice but concerning the Production Export functionality:

For existing environments it is possible to use the Export for deployment from the Production configuration page for one or more items and not the whole production. This allows changing existing items or adding items to a production when deploying the export file. When changing an item the deployment code will disable the item first if it is enabled and then re-enable the item as necessary after the deployment has finished.

It is possible to remove items using the deployment functionality but for this one needs to use Ens.Deployment.Util APIs and not the GUI to create the removal deployment package. 

Concerning settings - if you haven't seen perhaps System Default Settings might be appropriate  (https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...).

An alternative use of System Default Settings by some sites is to use for the same values without having to enter per item - hence the option in the Export for deployment dialog  to export deployable System Default Settings.

The Export from the Production configuration page attempts to identify what are linked items/code but might not be complete. This is the reason for being able to add Studio project contents to the export.  In version 2017.2.0 we added detection of RecordMap classes to be included in the export. 

Best wishes

James
 

See class method EnsLib.Testing.Service::SendTestRequest() that allows one to issue the test from terminal without having to add another component.

classmethod SendTestRequest(pTarget As %String, pRequest As Ens.Request, ByRef pResponse As Ens.Response, Output pSessionId As %String, pGetReply As %Boolean = 0) as %Status

    Send a test request to the specified target host (BusinessProcess or BusinessOperation). 

Thanks Scott,

Our EnsLib.HL7.Service.FTPService uses the FilePath setting in the Source information which does not account for the sub directory searching option:

OnProcessInput() line:

Set tIOStream.Name=pFTPStream.Attributes("Filename")_$C(13,10)_"via FTP "_..Adapter.FTPServer_":"_..Adapter.FTPPort_" path '"_..Adapter.FilePath_"'"
 

But the adapter is passing the actual path where the file was retrieved from in pFTPStream.Attributes("FTPDir") . I will make the change in EnsLib.HL7.Service.FTPService to use  pFTPStream.Attributes("FTPDir") instead of ..Adapter.FilePath but I am afraid I cannot advise on which release this will be in.

To verify from terminal using  write  ##class(EnsLib.HL7.Message).%OpenId(<id>).Source

returns before the code change:

somefile.hl7
via FTP 192.168.224.100:2121 path '/hl7'

to

somefile.hl7
via FTP 192.168.224.100:2121 path '/hl7/1/yellow/'

Would this be sufficient for your needs or since you state the reasons are more complicated  a more elegant solution in the Ensemble service is needed.

Kind regards

James