The method of maintaining consistency with respect to concurrent message processing depends on the persister being used. Some may use a transactional lock, and others may perform an atomic change with optimistic concurrency control.
If Saga (type) handles multiple message types and those messages arrive at the same time, based on the concurrency, the saga will be invoked multiple times, but only one message will be the “winner” and the rest will be rolled back and retried.
If they can executed in parallel, is there some way it can be turned off, at least for a given instance of a saga?
Not for an instance of a saga, but could be for a specific saga type, if it’s isolated to its own endpoint with concurrency set to one.