RingMessage

Derive Macro RingMessage 

Source
#[derive(RingMessage)]
{
    // Attributes available to this derive:
    #[message]
    #[ring_message]
}
Expand description

Derive macro for implementing the RingMessage trait.

§Attributes

On the struct (via #[message(...)] or #[ring_message(...)]):

  • type_id = 123 - Set explicit message type ID (or domain offset if domain is set)
  • domain = "OrderMatching" - Assign to a business domain (adds base type ID)
  • k2k_routable = true - Register for K2K routing discovery
  • category = "orders" - Group messages for K2K routing

On fields:

  • #[message(id)] - Mark as message ID field
  • #[message(correlation)] - Mark as correlation ID field
  • #[message(priority)] - Mark as priority field

§Examples

Basic usage:

#[derive(RingMessage)]
#[message(type_id = 1)]
struct MyMessage {
    #[message(id)]
    id: MessageId,
    #[message(correlation)]
    correlation: CorrelationId,
    #[message(priority)]
    priority: Priority,
    payload: Vec<u8>,
}

With domain (type ID = 500 + 1 = 501):

#[derive(RingMessage)]
#[ring_message(type_id = 1, domain = "OrderMatching")]
pub struct SubmitOrderInput {
    #[message(id)]
    id: MessageId,
    pub order: Order,
}
// Also implements DomainMessage trait
assert_eq!(SubmitOrderInput::domain(), Domain::OrderMatching);

K2K-routable message:

#[derive(RingMessage)]
#[ring_message(type_id = 1, domain = "OrderMatching", k2k_routable = true, category = "orders")]
pub struct SubmitOrderInput { ... }

// Runtime discovery:
let registry = K2KTypeRegistry::discover();
assert!(registry.is_routable(501));