Best Practice for 1-Many Functional Exchanges

Are there any best practices about modeling cases where there are a lot of 1-to-many functional exchanges?
I’m modelling a system which, in practice, uses ROS (Robotic Operating System) to communicate between modular code elements. ROS uses a publisher-server-subscriber model to transfer data between tasks. I.e. one “function” publishes a topic with a defined message type periodically, and other functions may subscribe to that message. In PA, it makes sense to model the ROS server explicitly and have it host a bunch of Duplicate functions.
However, I’m wondering if there’s a best way to model it in LA without assuming a solution that involves this Pub/Sub architecture; i.e. there is no “Server” logical component. Some options are:

  1. Generating function has 1 function port with exchanges from that port to each consuming function
  2. Generating function has 1 function port and associated exchange for each consumer
  3. Generating function has a functional exchange to a sister Duplicate function (which is allocated to the same logical component
    a. duplicate function uses a 1-port distribution
    b. duplicate function uses a multi-port distribution
  4. other?

Hi Ryan,
What aspect of the publish-subscribe pattern is important for your model at the logical level? Do you want for example to emphasize that the information provided by the Generating function is always delivered to all the subscribers?
If that is the case then maybe an Option 4 would work for you, namely the built-in Duplicate function of Arcadia/Capella. For my modelling purposes the Duplicate comes very close to the pub/sub pattern without the need to introduce dedicated functions.

Regards,
Marcin