execute separate commands in order

I have an understanding problem about a command bus where I need to execute two separate commands in order.

In my case I have a command bus which dispatches commands into a queue to be executed later (possibly on a different instance) and I have two separate commands that I need to execute in order. The second one should only be executed after the first one has been succeeded.

It should look something like this (simplified):

  1. Controller: dispatch command1 (send into queue)
  2. Command Handler: execute command1 -> dispatch success event
  3. Event Handler: handle success event of command1 -> dispatch command2
  4. Command Handler: execute command2

Now, my problem is that command1 & command2 need different information only available in the controller but the commands are separate and command1 should not know about command2.
Additionally command2 should only be executed after command1 has been succeeded and the command bus uses a queue (not executed immediately).

Currently I only see possibilities that are either ugly or very complex:

  • Combine command2 into command1 just so that the event handler can dispatch command2 with all needed information
    (ugly as command1 should not know about command2)
  • separate storage to fetch command2 in event handler
    (high complexity as a separate storage service is needed)
  • create separate command which includes both commands and separate handler directly calling actual handler
    (possibly breaks auto generate events as the command bus does not know about the real commands to be executed)

What I’m missing / What I’m doing wrong here?