# MessageData Writer

The message data writer is the more primitive writer of the two levels of writer, with the messaging writer being the upper level.

Using the message data writer is uncommon for typical applications. It can be useful when eliminating the message-to-message-data transformation when utmost performance optimization is required, and it can be useful as well in certain testing scenarios.

The message data writer writes message data to the message store. In the most common scenario, the message data are converted from rich message objects.

# Example

message_data = MessageStore::MessageData::Write.new

message_data.data = {
  some_attribute: 'some value'
  some_other_attribute: 'some other value'

stream_name = "account-123"

MessageStore::Write.(message_data, stream_name)

# MessageData Writer Facts

  • The message data writer can write one message or a batch of messages
  • A write is always made to a single stream
  • A writer can protect writes against concurrency using its expected_version argument
  • Actuating a writer can be done either from its class interface or its instance interface

# MessageStore::Postgres::Write Class

The Write class is a concrete class from the MessageStore::Postgres library and namespace.

The MessageStore::Postgres::Write class provides:

  • Actuator methods for both the class and instance interface that write message data to the specified stream

# Writing a MessageData

call(message_data, stream_name, expected_version: nil)


Position of the message_data written.




Name Description Type
message The message to be written Messaging::Message or Array
stream_name The stream name to write the message to String
expected_version Expected version of the stream at the time of the write Integer

The writer is a callable object. It's actuated using the .() convention.

write.(some_message, some_stream)

Conversely, the writer can be actuated by directly invoking the call method. It can also be actuated via the write alias, although this option is rarely exercised in practice.

Note: Streams only come into existence when messages are written to them. There's no need to create a stream before using it. A stream is created implicitly by an event having been written to it.

# Log Tags

The following tags are applied to log messages recorded by a message data writer:

Tag Description
write Applied to all log messages recorded by a message data writer
message_store Applied to all log messages recorded inside the MessageStore namespace

The following tags may be applied to log messages recorded by a message data writer:

Tag Description
message_data Applied to log messages that record the writing of a MessageData instance
data Applied to log messages that record the data content of a MessageData instance

See the logging user guide for more on log tags.