Skip to content
On this page

Channel ​

The Channel is a resource of the Broker. It is a message transmission path. Each channel can determine its associated contract.

Internal Channel Architecture ​

Internally, the channel is defined by Channel, AbstractChannel, and their registry-specific implementations.

📦 @ts-messaging/common ​

Channel ​

ts
export interface Channel {
    readonly name: string;

    findContract(): Promise<Contract | null>;
}

ChannelFactory ​

The ChannelFactory is used by the Broker to create a Channel from the name of the channel. The ChannelFactory is broker-specific and is implemented by each client package.

ts
export interface ChannelFactory{
    produce(input: { name: string }): Promise<Channel>;
}

📦 @ts-messaging/client ​

AbstractChannel ​

The AbstractChannel is the base class for all broker-specific implementations of the Channel interface. The AbstractChannel is responsible for caching the contract associated with the channel.

ts
import { Schema } from "./Schema";

export abstract class AbstractContract implements Channel {

    abstract readonly name: string;
    protected contract: Promise<Contract | null> | undefined;
    
    //The broker-specific loading of the contract
    protected abstract loadContract(): Promise<Contract | null>;

    //Caching mechanism for the contract
    async findContract(): Promise<Contract | null> {
        if (this.contract) {
            return this.contract;
        }

        this.contract = this.loadContract();
        const value = await this.contract;

        if (!value) {
            this.contract = undefined;
        }

        return value;
    }
}

Released under the MIT License.