Architecturally pulsar-client-dotnet is a series of actors that send messages to each other. Each of them uses Unbounded Channel as a message queue and processes messages one by one in loop. Actors communicate with each other by sending messages between each other. Messages are modeled as discriminated unions
Connections to broker are reused (one connection per server) between producers and consumers.
PulsarClient class serves as un umbrella class and stores reference to all other entities, i.e. consumers, producers, connection pool, lookup service and schema providers