<h1 dir="auto">Checklist</h1>

<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have checked the <a href="https://github.com/celery/celery/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+label%3A%22Issue+Type%3A+Feature+Request%22+">issues list</a><br>
for similar or identical feature requests.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have checked the <a href="https://github.com/celery/celery/pulls?utf8=%E2%9C%93&amp;q=is%3Apr+label%3A%22PR+Type%3A+Feature%22+">pull requests list</a><br>
for existing proposed implementations of this feature.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have checked the <a href="https://github.com/celery/celery/commits/master">commit log</a><br>
to find out if the if the same feature was already implemented in the<br>
master branch.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have included all related issues and possible duplicate issues<br>
in this issue (If there are none, check this box anyway).</li>
</ul>
<h2 dir="auto">Related Issues and Possible Duplicates</h2>

<h4 dir="auto">Related Issues</h4>
<ul dir="auto">
<li>None</li>
</ul>
<h4 dir="auto">Possible Duplicates</h4>
<ul dir="auto">
<li>None</li>
</ul>
<h1 dir="auto">Description</h1>
<p dir="auto">I was trying to change config of Redis backend connections (not Kombu <em>broker_transport_options</em>).<br>
This is not a problem for <code class="notranslate">socket_timeout</code> and <code class="notranslate">socket_connect_timeout</code> (I've set <code class="notranslate">CELERY_REDIS_SOCKET_TIMEOUT</code> and <code class="notranslate">CELERY_REDIS_SOCKET_CONNECT_TIMEOUT</code>), but problem to change <code class="notranslate">socket_keepalive</code> and <code class="notranslate">retry_on_timeout</code>.<br>
I think this can be helpful - sometimes I catching <code class="notranslate">TimeoutError</code> from Beat on <code class="notranslate">'SUBSCRIBE'</code> event.</p>
<h1 dir="auto">Suggestions</h1>
<p dir="auto">I propose add <code class="notranslate">socket_keepalive</code> and <code class="notranslate">retry_on_timeout</code> to connparams of <code class="notranslate">RedisBackend</code>:<br>
</p><div class="Box Box--condensed my-2">
  <div class="Box-header f6">
    <p class="mb-0 text-bold">
      <a href="https://github.com/celery/celery/blob/240ef1f64c8340bfffc31359f842ea4a6c8c493a/celery/backends/redis.py#L185-L194">celery/celery/backends/redis.py</a>
    </p>
    <p class="mb-0 color-fg-muted">
        Lines 185 to 194
      in
      <a data-pjax="true" class="commit-tease-sha" href="/celery/celery/commit/240ef1f64c8340bfffc31359f842ea4a6c8c493a">240ef1f</a>
    </p>
  </div>
  <div itemprop="text" class="Box-body p-0 blob-wrapper blob-wrapper-embedded data">
    <table class="highlight tab-size mb-0 js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">

        <tbody><tr class="border-0">
          <td id="L185" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="185"></td>
          <td id="LC185" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s1">self</span>.<span class="pl-s1">connparams</span> <span class="pl-c1">=</span> { </td>
        </tr>

        <tr class="border-0">
          <td id="L186" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="186"></td>
          <td id="LC186" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'host'</span>: <span class="pl-en">_get</span>(<span class="pl-s">'redis_host'</span>) <span class="pl-c1">or</span> <span class="pl-s">'localhost'</span>, </td>
        </tr>

        <tr class="border-0">
          <td id="L187" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="187"></td>
          <td id="LC187" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'port'</span>: <span class="pl-en">_get</span>(<span class="pl-s">'redis_port'</span>) <span class="pl-c1">or</span> <span class="pl-c1">6379</span>, </td>
        </tr>

        <tr class="border-0">
          <td id="L188" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="188"></td>
          <td id="LC188" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'db'</span>: <span class="pl-en">_get</span>(<span class="pl-s">'redis_db'</span>) <span class="pl-c1">or</span> <span class="pl-c1">0</span>, </td>
        </tr>

        <tr class="border-0">
          <td id="L189" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="189"></td>
          <td id="LC189" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'password'</span>: <span class="pl-en">_get</span>(<span class="pl-s">'redis_password'</span>), </td>
        </tr>

        <tr class="border-0">
          <td id="L190" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="190"></td>
          <td id="LC190" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'max_connections'</span>: <span class="pl-s1">self</span>.<span class="pl-s1">max_connections</span>, </td>
        </tr>

        <tr class="border-0">
          <td id="L191" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="191"></td>
          <td id="LC191" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'socket_timeout'</span>: <span class="pl-s1">socket_timeout</span> <span class="pl-c1">and</span> <span class="pl-en">float</span>(<span class="pl-s1">socket_timeout</span>), </td>
        </tr>

        <tr class="border-0">
          <td id="L192" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="192"></td>
          <td id="LC192" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">'socket_connect_timeout'</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L193" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="193"></td>
          <td id="LC193" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">socket_connect_timeout</span> <span class="pl-c1">and</span> <span class="pl-en">float</span>(<span class="pl-s1">socket_connect_timeout</span>), </td>
        </tr>

        <tr class="border-0">
          <td id="L194" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="194"></td>
          <td id="LC194" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> } </td>
        </tr>
    </tbody></table>
  </div>
</div>
<p></p>
<p dir="auto">It looks like it would require boto3 1.4.2. And it has new required arguments for the send_message call.</p>
<p dir="auto">I created a new queue but my worker wouldn't connect. I'm wondering if you just don't support it yet.</p>
<p dir="auto"><a href="https://aws.amazon.com/blogs/aws/new-for-amazon-simple-queue-service-fifo-queues-with-exactly-once-delivery-deduplication/" rel="nofollow">https://aws.amazon.com/blogs/aws/new-for-amazon-simple-queue-service-fifo-queues-with-exactly-once-delivery-deduplication/</a></p>