Configuring message payload | Laravel Kafka              

 [ K Laravel Kafka ](/) [Docs](/docs) [Blog](https://laravelkafka.com/blog) [GitHub](https://github.com/mateusjunges/laravel-kafka) 

     Search ⌘K       [    Login with GitHub Login ](https://laravelkafka.com/oauth/github/redirect) 

    Docs for version         

   selected

 v3.0     

 v2.13     

 v2.12     

 v2.11     

 v2.10     

 v2.9     

 v2.8     

 v1.13   

- - [ Introduction ](/docs/v3.0/introduction)
    - [ Requirements ](/docs/v3.0/requirements)
    - [ Installation and Setup ](/docs/v3.0/installation-and-setup)
    - [ Questions and issues ](/docs/v3.0/questions-and-issues)
    - [ Changelog ](/docs/v3.0/changelog)
    - [ Upgrade guide ](/docs/v3.0/upgrade-guide)
    - [ Example docker-compose file ](/docs/v3.0/example-docker-compose)
- Producing messages
    ------------------

    - [ Producing messages ](/docs/v3.0/producing-messages/producing-messages)
    - [ Configuring your kafka producer ](/docs/v3.0/producing-messages/configuring-producers)
    - [ Configuring message payload ](/docs/v3.0/producing-messages/configuring-message-payload)
    - [ Custom serializers ](/docs/v3.0/producing-messages/custom-serializers)
    - [ Publishing to kafka ](/docs/v3.0/producing-messages/publishing-to-kafka)
- Consuming messages
    ------------------

    - [ Creating a kafka consumer ](/docs/v3.0/consuming-messages/creating-consumer)
    - [ Subscribing to kafka topics ](/docs/v3.0/consuming-messages/subscribing-to-kafka-topics)
    - [ Using regex to subscribe to kafka topics ](/docs/v3.0/consuming-messages/using-regex-to-subscribe-to-kafka-topics)
    - [ Assigning consumers to a topic partition ](/docs/v3.0/consuming-messages/assigning-partitions)
    - [ Consuming messages from specific offsets ](/docs/v3.0/consuming-messages/consuming-from-specific-offsets)
    - [ Consumer groups ](/docs/v3.0/consuming-messages/consumer-groups)
    - [ Partition Discovery and Dynamic Assignment ](/docs/v3.0/consuming-messages/partition-discovery)
    - [ Message handlers ](/docs/v3.0/consuming-messages/message-handlers)
    - [ Configuring consumer options ](/docs/v3.0/consuming-messages/configuring-consumer-options)
    - [ Handling failed messages ](/docs/v3.0/consuming-messages/handling-failed-messages)
    - [ Custom deserializers ](/docs/v3.0/consuming-messages/custom-deserializers)
    - [ Consuming messages ](/docs/v3.0/consuming-messages/consuming-messages)
    - [ Pausing partitions ](/docs/v3.0/consuming-messages/pausing-partitions)
    - [ Consumer classes ](/docs/v3.0/consuming-messages/class-structure)
    - [ Using consumers with Laravel Telescope ](/docs/v3.0/consuming-messages/laravel-telescope)
- Advanced usage
    --------------

    - [ Connections ](/docs/v3.0/advanced-usage/connections)
    - [ Replacing the default serializer/deserializer ](/docs/v3.0/advanced-usage/replacing-default-serializer)
    - [ Graceful shutdown ](/docs/v3.0/advanced-usage/graceful-shutdown)
    - [ Running consumers in production ](/docs/v3.0/advanced-usage/running-consumers-in-production)
    - [ SASL Authentication ](/docs/v3.0/advanced-usage/sasl-authentication)
    - [ Custom Committers ](/docs/v3.0/advanced-usage/custom-committers)
    - [ Manual Commit ](/docs/v3.0/advanced-usage/manual-commit)
    - [ Middlewares ](/docs/v3.0/advanced-usage/middlewares)
    - [ Stop consumer when there are no messages left ](/docs/v3.0/advanced-usage/stop-consumer-after-last-message)
    - [ Stop consumer on demand ](/docs/v3.0/advanced-usage/stopping-a-consumer)
    - [ Writing custom loggers ](/docs/v3.0/advanced-usage/custom-loggers)
    - [ Before and after callbacks ](/docs/v3.0/advanced-usage/before-callbacks)
    - [ Setting global configurations ](/docs/v3.0/advanced-usage/setting-global-configuration)
    - [ Sending multiple messages with the same producer ](/docs/v3.0/advanced-usage/sending-multiple-messages-with-the-same-producer)
    - [ Events ](/docs/v3.0/advanced-usage/events)
    - [ Consumer lag ](/docs/v3.0/advanced-usage/consumer-lag)
- Testing
    -------

    - [ Kafka fake ](/docs/v3.0/testing/fake)
    - [ Assert Published ](/docs/v3.0/testing/assert-published)
    - [ Assert published On ](/docs/v3.0/testing/assert-published-on)
    - [ Assert not published ](/docs/v3.0/testing/assert-not-published)
    - [ Assert nothing published ](/docs/v3.0/testing/assert-nothing-published)
    - [ Assert published times ](/docs/v3.0/testing/assert-published-times)
    - [ Assert published on times ](/docs/v3.0/testing/assert-published-on-times)
    - [ Mocking your kafka consumer ](/docs/v3.0/testing/mocking-your-kafka-consumer)

  Configuring message payload 
=============================

A Kafka message has a body, headers and a key. All of them can be configured on the pending message returned by the `publish` method, and sent with the `send` method.

  Sponsorship 

Support Laravel Kafka by sponsoring me!

Laravel Kafka is free and Open Source software, built to empower developers like you. Your support helps maintain and enhance the project. If you find it valuable, please consider sponsoring me on GitHub. Every contribution makes a difference and keeps the development going strong! Thank you!

 [   Become a Sponsor ](https://github.com/sponsors/mateusjunges) Want to hide this message? Sponsor at any tier of $10/month or more! 

### [](#content-configuring-the-message-body "Permalink")Configuring the message body

Use the `withBody` method to set the body of the message. With the default JSON serializer, arrays are encoded as JSON:

         ```
use Junges\Kafka\Facades\Kafka;

Kafka::publish('orders')
    ->withBody(['id' => 1, 'status' => 'paid', 'paid_at' => now()->toIso8601String()])
    ->send();
```

### [](#content-configuring-message-headers "Permalink")Configuring message headers

Use the `withHeaders` method to set all the headers, and the `withHeader` method to set a single one:

         ```
use Junges\Kafka\Facades\Kafka;

Kafka::publish('orders')
    ->withHeaders(['source' => 'checkout'])
    ->withHeader('tenant', 'acme')
    ->withBody(['id' => 1])
    ->send();
```

### [](#content-using-kafka-keys "Permalink")Using Kafka keys

In Kafka, keys determine the partition a message is appended to. Messages with the same key are appended to the same partition, so they are consumed in the order they were published. Use the `withKey` method to set the key of your message:

         ```
use Junges\Kafka\Facades\Kafka;

Kafka::publish('orders')
    ->withKey((string) $order->id)
    ->withBody($order->toArray())
    ->send();
```

### [](#content-using-message-objects "Permalink")Using message objects

The `withMessage` method sets the entire message, and it accepts a `Junges\Kafka\Message\Message` instance as argument. The key, headers and body set with the other methods are applied on top of it, whether they are called before or after `withMessage`, and the given message itself is not modified:

         ```
use Junges\Kafka\Facades\Kafka;
use Junges\Kafka\Message\Message;

$message = new Message(
    headers: ['header-key' => 'header-value'],
    body: ['key' => 'value'],
    key: 'kafka key here',
);

Kafka::publish('topic')->withMessage($message)->send();
```

### [](#content-message-ids "Permalink")Message ids

Every message gets a unique id when it is created, stored in the `laravel-kafka::message-id` header. The id stays the same for the whole life of the message: it is sent to Kafka, and it is available in the [ events ](../advanced-usage/events) dispatched while the message is published and consumed. Use the `getMessageIdentifier` method to get it:

         ```
use Junges\Kafka\Facades\Kafka;

$pending = Kafka::publish('orders')->withBody(['id' => 1]);

$id = $pending->getMessage()->getMessageIdentifier();

$pending->send();
```

To use your own id, for instance one that already identifies the operation in your application, set the header yourself:

         ```
Kafka::publish('orders')
    ->withHeader('laravel-kafka::message-id', $operationId)
    ->withBody(['id' => 1])
    ->send();
```

Consumed messages keep the id they were published with. When a consumed message has no id, for instance because it was published by another application, the consumer gives it a new one. The name of the header can be changed with the `message_id_key` key of the `config/kafka.php` file, or the `MESSAGE_ID_KEY` environment variable.

Previous

 [    Configuring your kafka producer ](https://laravelkafka.com/docs/v3.0/producing-messages/configuring-producers) 

Next

 [ Custom serializers    ](https://laravelkafka.com/docs/v3.0/producing-messages/custom-serializers) 

 Sponsors

 [ version="1.0" encoding="UTF-8"?       EasyCal ](https://easycal.app/) 

 [       Search  ⌘ K   ](https://typesense.org/)
