Dispatcher x Performer or Linear Build?

Good afternoon, everyone!

I have a specific doubt regarding an RPA design approach.

I am Currently working on a process that reads items from an Orchestrator Queue, accesses a website and extract data. The process itself isn’t a big deal, but I’m considering two scenarios:

First option:
A Dispatcher that reads a static excel file (15 lines, same data every time), stored in the Input folder on the robot dependencies, pushes it up to the Orchestrator Queue and then, a Performer would execute those 15 items.

Second option:
A single REFramework where, during the Initialization state, the workflow reads the same file and populate the data to an Orchestrator Queue to be processed on the same execution.

In terms of performance and infrastructure perspective, which scenario would be more efficient?

Contextualizing, our RPA environment is composed by 5 servers and over 270 bots (unfortunatelly, running out of windows of execution :sob:), I am trying to chose the most efficient design to deal with smaller use cases like this one.

Would using a Dispatcher x Performer design, to deal with this kind of projects, be considered excessive?

@Athos

I would suggest to go with dispatcher/performer due to below pointers.

  1. Retry of any faild transaction will be easy.
  2. Very less modification in the reframework.
  3. Dispatcher execution will take 30-60 seconds max. So not much burden on the server.
  4. Code maintainability will be good as we will be sticking to reframework template with less changes.

@Athos

as it is a single time addition and straight read and add…just use bulk add queue item and add the data this will complete dispatcher in two activities hardly

also to ensure multi bot architecture have a input flag argument and set it to true only when you need dispatcher..so you can add one time trigger with true and all queue triggers with false so that dispatcher runs on time trigger and once items are added queue trigger would start remaining if needed

cheers

Hello @Athos,

You can use the Simple RE Framework with a data table as transactional data and each row as a transaction item. However, some additional code will need to be developed to keep track of processed items.

For Dispatcher X Performer, it is not necessary to create two projects. Just create an additional XAML file for the dispatcher and enable the entry point; your main will act as the performer entry point. This approach allows one project to have two entry points and avoids the extra logic to handle completed items.

Thanks,
Karthik

The consideration on having your dispatcher nested somewhere in a performer Init (let call it a hybrid) versus a separate dispatcher / performer usually comes down to this:

  • scalability. Having the dispatcher nested in the performer limits you to run more distributed runs, having multiple performers work in parallel to process higher loads quickly.
  • Overhead. Starting and stopping a separate dispatcher takes longer. Not that much depending on your architecture, but it is there.
  • Simplicity. Sometimes having a simple robot as a single entity is just easier to contain.
  • Standardization. If you have multiple bots in your landscape, and they are all built as a duo, sticking to the standard has benefits, especially in larger teams.
  • Triggering / scheduling. On a crowded platform you need to make sure to align your triggers so dispatcher and performer can and will follow each other. Rarely an issue, but again something to consider.
  • Complexity of the dispatcher logic. REF has a strong error handler / retry mechanism. Having a dispatcher sub workflow stuffed somewhere in the Init might require additional error handling logic, especially if a lot of GUI steps are involved.
  • Cake. Never underestimate this.

Looking at your process description you are most likely safe with a hybrid solution. You might want to have those 15 items stored remotely (storage bucket or some other data field) that even if they rarely change, they might some day. Being able to do a non-release change in behaviour makes you flexible. If you ever expect the workload to increase you might still want to consider separating the dispatcher. See above.

When using Bulk Add Queue Item activity, it doesn’t require a For Each loop to add the items separately? It works just like a dictionary if I got it right.

As you said, looking for the full landscape we have nowadays, right choice would be to standardize it all, even for small builds that might change?

The problem here is that using a data table to deal with items (of course, in my opinion), isn’t the best due to lack of the “keeping track feature” that is present on the Orchestrator Queues…

@Athos

not dictionary but datatable

just read the data to datatble and pass to bulk add queue item and it would add all items and no loops are needed..column names are used as specific content keys. If you need reference add the column for that as well

cheers

Fine, understood it now! Had never used Bulk Add Queue Items but I will, for sure. Thank you for the advice!

Searching on the properties of the acitivity, I didn’t see the “Reference” field, as on the casual Add Queue Item activity… Is there a way to use reference in these use cases?

@Athos

in the datatable itself you need to add a column reference directly

check here for exact names

cheers