<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="317286" data-post-id="317286">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dwark" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwark/120/30559_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dwark
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="_jonas" data-post="11" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/48/34169_2.png" class="avatar"> _jonas:</div>
<blockquote>
<p>So is this empty receive block thing with timeout a common pattern, and is it better than doing <code>Process.sleep</code> or does it block the process in the same way?</p>
</blockquote>
</aside>
<p>It’s basically the same thing except that <code>Process.sleep</code> also handles <code>:infinity</code>,<br>
dunno if it’s a common pattern or not.</p>
<p>Your current method will block your GenServer from handling system messages under the hood: <em>your</em> GenServer code is just a part of it.</p>
<p>You probably want a GenServer state with a queue of some sorts (could be a simple list for lifo processing if you don’t care about the order in which they arrive versus are being handled) in combination with a <code>wait</code> flag.</p>
<p>If <code>wait</code> is true, simply prepend the incoming request to the list of pending requests (or use a <code>:queue</code>).  If <code>wait</code> is false and queue is empty, process the request by calling <code>dispatch_request/1</code>.  If queue is non-empty, queue the request and start processing the queue.</p>
<p><code>dispatch_request/1</code> should return either:</p>
<ul>
<li><code>{:ok, response}</code> or</li>
<li><code>{:wait, milliseconds}</code> if it sees a 429 response.</li>
</ul>
<p>In the first case, if queue is non-empty, you process the next entry.<br>
In the latter case, you queue the (failed) request, set <code>wait</code> to <code>true</code> and use <code>Process.send_after/4</code> to send yourself a :resume message at a later point in time.</p>
<p>Something like that anyway.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317286" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-317286" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317286"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-solved cat-solved" title="Marked as solution"></div>
  </section>
</div>
    <div class="postbit" id="317288" data-post-id="317288">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="_jonas" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/120/34169_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  _jonas
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Alright, thanks very much for your time, I think I get the idea now <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317288" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-317288" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317288"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="317290" data-post-id="317290">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="derek-zhou" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/derek-zhou/120/19943_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  derek-zhou
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">    receive do
    after
      time_in_ms -&gt; call_api(url, max_tries - 1)
    end
</code></pre>
<p>I don’t recommend this, because then you cannot limit the concurrency of API calls, and that could make the API provider unhappy; especially if you are on free-tier or budget tier.</p>
<p>A GenServer with progressive Process.sleep after receiving 429 is ok for low traffic, one way (think web hooks) API calls.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317290" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-317290" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317290"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="317291" data-post-id="317291">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I keep shilling for this technique regularly now: <a href="https://blog.sequin.io/genserver-reply-dont-call-us-well-call-you/" class="inline-onebox" rel="noopener nofollow ugc">GenServer.reply: Don't Call Us, We'll Call You</a></p>
<p>You do not block the <code>GenServer</code> while at the same time you make the caller wait. It’s ideal IMO because the caller doesn’t have to invent extra logic to match on a return value and do <code>Process.sleep</code>; this pattern will just block it until the <code>GenServer</code> sends it what it needs (which it will not do immediately due to the rate-limiting constraints).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317291" data-batch-url="/posts/batch_likers">
                        9
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-317291" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317291"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="317293" data-post-id="317293">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dwark" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwark/120/30559_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dwark
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Agreed, but that was assuming there were no concurrent calls …</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317293" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-317293" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317293"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="317304" data-post-id="317304">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jswanner" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jswanner/120/24585_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jswanner
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="_jonas" data-post="7" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/48/34169_2.png" class="avatar"> _jonas:</div>
<blockquote>
<p>This is a fair amount of added complexity in my head at least</p>
</blockquote>
</aside>
<p>For sure, it’s a matter of “quick and dirty” (Process.sleep), or more robust (GenServer.reply). It’s not just about the bookkeeping thing I mentioned, you might also want to introspect this process from time to time, to see how big the queue is or whatever, and you can’t do that if the process is blocking.</p>
<p>Another question: do you need a queue or can you load shed (drop requests)?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317304" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-317304" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317304"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="317365" data-post-id="317365">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dwark" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwark/120/30559_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dwark
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Very useful! Thank you, bookmarked for later use ..</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317365" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-317365" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317365"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="317375" data-post-id="317375">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="_jonas" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/120/34169_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  _jonas
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jswanner" data-post="17" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jswanner/48/24585_2.png" class="avatar"> jswanner:</div>
<blockquote>
<p>For sure, it’s a matter of “quick and dirty” (Process.sleep), or more robust (GenServer.reply). It’s not just about the bookkeeping thing I mentioned, you might also want to introspect this process from time to time, to see how big the queue is or whatever, and you can’t do that if the process is blocking.</p>
</blockquote>
</aside>
<p>Yeah that’s fair, I just like the simplicity of using the message queue that already exists for the process, but it’s great to be aware of the tradeoff, I may refactor to this queue and reply method depending on the needs of the app.</p>
<aside class="quote no-group" data-username="jswanner" data-post="17" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jswanner/48/24585_2.png" class="avatar"> jswanner:</div>
<blockquote>
<p>Another question: do you need a queue or can you load shed (drop requests)?</p>
</blockquote>
</aside>
<p>No I want to absolutely never drop requests, but I’m also not expecting sustained high load, perhaps I can give some context:</p>
<p>This is for interacting with the Paddle API, which is a Payments processor for digital goods, I have a large inventory of items in my own database that I need to synchronize with the catalog in Paddle, creating and updating items there, but also occasionally fetching orders for fulfillment (this will be very low volume, like literally maybe once per day if even) and that would probably be initiated from a webhook.</p>
<p>The request limit is 240 per minute, and the product catalog I’m synchronizing is larger than that, so when synchronizing a full catalog, the rate limit will always be exceeded, and in that case I just want the synchronizing to pause for the full timeout (it’s always 60 seconds but I’m reading it from the header anyways) and then continue. And during that wait time all requests will just be forced to wait, they cannot be dropped.</p>
<p>So I know for sure that the limit will only be reached when I do a full sync of the catalog, which shouldn’t really happen a lot. If I happen to route more requests through there, I may upgrade to a more ‘solid’ solution with regards to rate limiting.</p>
<p>Anyways thanks again for the input everyone, I really appreciate it and definitely learned some things.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317375" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-317375" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317375"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="317376" data-post-id="317376">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="_jonas" data-post="19" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/48/34169_2.png" class="avatar"> _jonas:</div>
<blockquote>
<p>I just want the synchronizing to pause for the full timeout (it’s always 60 seconds but I’m reading it from the header anyways) and then continue</p>
</blockquote>
</aside>
<p>Oh, so if you exhausted your limit for the minute you have to wait all the way until the next minute starts?</p>
<p>Say you do 60 requests between 13:20:00 and 13:20:15, now you have to wait 45 seconds until 13:21:00 comes around?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317376" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-317376" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317376"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="317377" data-post-id="317377">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="_jonas" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/_jonas/120/34169_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  _jonas
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well I don’t know how they implement their rate limiting, could be a rolling time window, or could be looking at the timestamps of the 240 previous requests or something, not sure.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="20" data-topic="61537">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>Say you do 60 requests between 13:20:00 and 13:20:15, now you have to wait 45 seconds until 13:21:00 comes around?</p>
</blockquote>
</aside>
<p>Not sure I understand, the rate limit is 240 per minute, so if I do 60 requests between 13:20:00 and 13:20:15, I have another 45 seconds to do 180 requests before I hit the rate limit and am required to wait. But wait time is a full minute yeah.</p>
<p>I could already throttle my requests on my side to never reach the rate limit which would probably be more time efficient if that’s what you’re getting at, but I’m happy with the low level of complexity I have at the moment, because as mentioned I’m not expecting to have high sustained load that I need to process as quickly as possible.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="317377" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/using-process-sleep-for-rate-limiting-external-requests/61537/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-317377" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="317377"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/61537/load_more?page=3">Load more posts (4 remaining)</a>
</div></template></turbo-stream>