Skip to main content

Subject

A Subject in the KanthorQ system is a hierarchical entity that categorizes events. Understanding how subjects are structured and used in KanthorQ is essential for leveraging them effectively in your workflows.

Recommendation subject design decisions

  • A Subject in KanthorQ follows a left-to-right naming hierarchy, moving from general to specific. Here are examples illustrating this hierarchy:

    • ecommerce.order.created – Simple name definition.
    • tier_standard.order.created – Tier-specific subject.
    • internal.testing.order.created – Naming for internal testing environments.
    • Environment-specific: Separate operational environments, such as ecommerce.order.created.prod and ecommerce.order.created.uat, to facilitate testing or debugging.
    • Versioned subjects: Use versions like ecommerce.order.created.v1 and ecommerce.order.created.v2 for tracking updates over time.
  • Abstract Layer: Subjects should represent business logic, not technical details.

  • Longevity: Subjects should be designed to last throughout the business's lifecycle. If changes are required, consider creating a new version or an entirely new subject to replace outdated ones.

Define your subject

KanthorQ's subject definition aligns with NATS Subject-Based Messaging, supporting an interest-based messaging system. Here are the rules for defining subjects:

  • A subject is a case-sensitive string composed of multiple tokens separated by . (dot).
  • Each token is a string, allowing any character except ., *, and >.

There are some recommendations from the section Characters allowed and recommended for subject names I would recommend when you want to design your subject

  • Allowed characters: Any Unicode character except null, space, ., * and >
  • Recommended characters: (a - z), (A - Z), (0 - 9), - and _ (names are case sensitive, and cannot contain whitespace).
  • Naming Conventions: If you want to delimit words, use either CamelCase as in MyServiceOrderCreate or - and _ as in my-service-order-create
  • Special characters: The period . (which is used to separate the tokens in the subject) and * and also > (the * and > are used as wildcards) are reserved and cannot be used.

Matching your subject

In KanthorQ, you can match subjects to patterns using three methods:

  • Exact Match: Matches subjects with exact case-sensitive text.
  • Single-Token Wildcard (*): Matches exactly one token in the subject. For example, order.* matches order.created or order.updated but does not match order, order.created.v1, or order.updated.v1.
  • Multi-Token Wildcard (>): Using > wildcard to match multiple tokens in a subject. For example, order.> matches order.created, order.updated, order.created.v1, and order.updated.v1 but does not match order.

For more pattern matching examples, refer to the TestMatchSubject test.

Final Thoughts

Nothing, go test and find out some gochas ;D