<?xml version="1.0"?>
<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->

<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Runtime-Message-Compression">
 <title>Message Compression</title>
 <para>The Apache Qpid Broker for Java supports<footnote><para>Message compression is not yet supported for the 1.0
    protocol.</para></footnote> message compression. This feature works in co-operation with Qpid
  Clients implementing the same feature.</para>
 <para>Once the feature is enabled (using Broker context variable
   <emphasis>broker.messageCompressionEnabled</emphasis>), the Broker will advertise support for the
  message compression feature to the client at connection time. This allows clients to opt to turn
  on message compression, allowing message payload sizes to be reduced.</para>
 <para>If the Broker has connections from clients who have message compression enabled and others who
  do not, it will internally, on-the-fly, decompress compressed messages when sending to clients
  without support and conversely, compress uncomressed messages when sending to clients who do.</para>
 <para>The Broker has a threshold below which it will not consider compressing a message, this is
  controlled by Broker content variable
   (<literal>connection.messageCompressionThresholdSize</literal>) and expresses a size in bytes.</para>
 <para>This feature <emphasis>may</emphasis> have a beneficial effect on performance by:</para>
 <itemizedlist>
  <listitem>
   <para>Reducing the number of bytes transmitted over the wire, both between Client and Broker, and
    in the HA case, Broker to Broker, for replication purposes.</para>
  </listitem>
  <listitem>
   <para>Reducing storage space when data is at rest within the Broker, both on disk and in
    memory.</para>
  </listitem>
 </itemizedlist>
 <para>Of course, compression and decompression is computationally expensive. Turning on the feature
  may have a negative impact on CPU utilization on Broker and/or Client. Also for small messages
  payloads, message compression may increase the message size. It is recommended to test the feature
  with representative data.</para>
</section>
