# chengchengchenchen/distributed-publisher-subscriber-system architecture

> Architecture diagram of the GitHub repository chengchengchenchen/distributed-publisher-subscriber-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/chengchengchenchen/distributed-publisher-subscriber-system
- Repository: https://github.com/chengchengchenchen/distributed-publisher-subscriber-system

## Overview

DPSS is a distributed publisher–subscriber system: publishers create topics and publish messages through a selected broker; subscribers discover topics, subscribe, and manage subscriptions through a broker. Brokers register with a directory service and share broker membership; the sampled broker excerpt also shows message propagation across brokers. Topic, message, and participant records provide the internal data model. The README is only a title, and BrokerImpl excerpts omit some method bodies, so uncertain delivery and forwarding links are not drawn.

Main entry points: [`DPSS/src/main/java/Broker/BrokerImpl.java`](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerImpl.java) (Broker runtime), [`DPSS/src/main/java/Publisher/PublisherServer.java`](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherServer.java) (Publisher commands), [`DPSS/src/main/java/Directory/DirectoryServiceImpl.java`](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryServiceImpl.java) (Directory service), [`DPSS/src/main/java/Subscriber/SubscriberServer.java`](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberServer.java) (Subscriber commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Publisher and subscriber clients"]
  node_publisher["Publisher commands"]
  node_publisher_endpoint["Publisher endpoint<br/>[PublisherImpl.java]"]
  node_subscriber["Subscriber commands"]
  node_subscriber_endpoint["Subscriber endpoint"]
  node_publisher_api["Publisher RMI endpoint"]
  node_subscriber_api["Subscriber RMI endpoint"]
end

subgraph group_coordination["Directory coordination"]
  node_directory["Directory service"]
  node_directory_api["Directory RMI contract"]
  node_directory_server["Directory server"]
end

subgraph group_brokers["Broker services"]
  node_broker["Broker runtime<br/>[BrokerImpl.java]"]
  node_broker_api["Broker RMI contract"]
  node_broker_server["Broker server<br/>[BrokerServer.java]"]
end

subgraph group_model["Shared domain model"]
  node_broker_record["Broker record<br/>[Broker.java]"]
  node_publisher_record["Publisher record<br/>[Publisher.java]"]
  node_subscriber_record["Subscriber record<br/>[Subscriber.java]"]
  node_topic["Topic model<br/>[Topic.java]"]
  node_message["Message model<br/>[Message.java]"]
end

node_publisher_actor(("Publisher user"))
node_subscriber_actor(("Subscriber user"))

node_publisher_actor -->|"enters commands"| node_publisher
node_subscriber_actor -->|"enters commands"| node_subscriber
node_publisher -->|"gets brokers"| node_directory
node_subscriber -->|"gets brokers"| node_directory
node_directory_server -->|"binds service"| node_directory
node_directory -->|"implements"| node_directory_api
node_publisher -->|"creates, publishes, deletes"| node_broker
node_publisher -->|"gets topic details"| node_broker
node_subscriber -->|"lists, subscribes"| node_broker
node_subscriber -->|"reads and changes subscriptions"| node_broker
node_broker_server -->|"starts runtime"| node_broker
node_broker -->|"implements"| node_broker_api
node_broker -->|"registers and retrieves peers"| node_directory
node_directory -->|"notifies new peer"| node_broker
node_broker -->|"broadcasts published message"| node_broker
node_publisher -->|"registers endpoint"| node_publisher_endpoint
node_subscriber -->|"registers endpoint"| node_subscriber_endpoint
node_broker -->|"checks liveness"| node_subscriber_endpoint
node_broker -->|"checks liveness"| node_publisher_endpoint
node_publisher -->|"creates topic"| node_topic
node_publisher -->|"constructs message"| node_message
node_broker -->|"tracks peers"| node_broker_record
node_broker -->|"tracks publishers"| node_publisher_record
node_broker -->|"tracks subscribers"| node_subscriber_record
node_broker -->|"tracks topics"| node_topic
node_broker -->|"broadcasts message data"| node_message

click node_publisher "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherServer.java"
click node_publisher_endpoint "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherImpl.java"
click node_subscriber "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberServer.java"
click node_subscriber_endpoint "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberImpl.java"
click node_directory "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryServiceImpl.java"
click node_directory_api "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryService.java"
click node_directory_server "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryServiceServer.java"
click node_broker "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerImpl.java"
click node_broker_api "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerInterface.java"
click node_broker_server "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerServer.java"
click node_publisher_api "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherInterface.java"
click node_subscriber_api "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberInterface.java"
click node_broker_record "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Broker.java"
click node_publisher_record "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Publisher.java"
click node_subscriber_record "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Subscriber.java"
click node_topic "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Topic.java"
click node_message "https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Message.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_publisher,node_publisher_endpoint,node_subscriber,node_subscriber_endpoint,node_publisher_api,node_subscriber_api,node_publisher_actor,node_subscriber_actor toneBlue
class node_directory,node_directory_api,node_directory_server toneAmber
class node_broker,node_broker_api,node_broker_server toneMint
class node_broker_record,node_publisher_record,node_subscriber_record,node_topic,node_message toneRose
```

## Components

### Publisher and subscriber clients

- [Publisher commands](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherServer.java): `DPSS/src/main/java/Publisher/PublisherServer.java`
- [Publisher endpoint](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherImpl.java): `DPSS/src/main/java/Publisher/PublisherImpl.java`
- [Subscriber commands](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberServer.java): `DPSS/src/main/java/Subscriber/SubscriberServer.java`
- [Subscriber endpoint](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberImpl.java): `DPSS/src/main/java/Subscriber/SubscriberImpl.java`
- [Publisher RMI endpoint](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Publisher/PublisherInterface.java): `DPSS/src/main/java/Publisher/PublisherInterface.java`
- [Subscriber RMI endpoint](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Subscriber/SubscriberInterface.java): `DPSS/src/main/java/Subscriber/SubscriberInterface.java`

### Directory coordination

- [Directory service](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryServiceImpl.java): `DPSS/src/main/java/Directory/DirectoryServiceImpl.java`
- [Directory RMI contract](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryService.java): `DPSS/src/main/java/Directory/DirectoryService.java`
- [Directory server](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Directory/DirectoryServiceServer.java): `DPSS/src/main/java/Directory/DirectoryServiceServer.java`

### Broker services

- [Broker runtime](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerImpl.java): `DPSS/src/main/java/Broker/BrokerImpl.java`
- [Broker RMI contract](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerInterface.java): `DPSS/src/main/java/Broker/BrokerInterface.java`
- [Broker server](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Broker/BrokerServer.java): `DPSS/src/main/java/Broker/BrokerServer.java`

### Shared domain model

- [Broker record](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Broker.java): `DPSS/src/main/java/Utils/Broker.java`
- [Publisher record](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Publisher.java): `DPSS/src/main/java/Utils/Publisher.java`
- [Subscriber record](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Subscriber.java): `DPSS/src/main/java/Utils/Subscriber.java`
- [Topic model](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Topic.java): `DPSS/src/main/java/Utils/Topic.java`
- [Message model](https://github.com/chengchengchenchen/distributed-publisher-subscriber-system/blob/main/DPSS/src/main/java/Utils/Message.java): `DPSS/src/main/java/Utils/Message.java`

### Other components

- **Publisher user**
- **Subscriber user**

## Connections

- Publisher user → Publisher commands: enters commands
- Subscriber user → Subscriber commands: enters commands
- Publisher commands → Directory service: gets brokers
- Subscriber commands → Directory service: gets brokers
- Directory server → Directory service: binds service
- Directory service → Directory RMI contract: implements
- Publisher commands → Broker runtime: creates, publishes, deletes
- Publisher commands → Broker runtime: gets topic details
- Subscriber commands → Broker runtime: lists, subscribes
- Subscriber commands → Broker runtime: reads and changes subscriptions
- Broker server → Broker runtime: starts runtime
- Broker runtime → Broker RMI contract: implements
- Broker runtime → Directory service: registers and retrieves peers
- Directory service → Broker runtime: notifies new peer
- Broker runtime → Broker runtime: broadcasts published message
- Publisher commands → Publisher endpoint: registers endpoint
- Subscriber commands → Subscriber endpoint: registers endpoint
- Broker runtime → Subscriber endpoint: checks liveness
- Broker runtime → Publisher endpoint: checks liveness
- Publisher commands → Topic model: creates topic
- Publisher commands → Message model: constructs message
- Broker runtime → Broker record: tracks peers
- Broker runtime → Publisher record: tracks publishers
- Broker runtime → Subscriber record: tracks subscribers
- Broker runtime → Topic model: tracks topics
- Broker runtime → Message model: broadcasts message data
