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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <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 class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="AndyL" data-post="152" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andyl/48/3659_2.png" class="avatar"> AndyL:</div>
<blockquote>
<p>Use case: I have a ‘job runner’ Phoenix app similar in concept to Apache Airflow. The app allow end-users to schedule their own jobs, add and remove jobs, tweak the job execution frequency. I’m currently doing this with Quantum, and would like to consolidate dependencies. To make it work on Oban probably I would use a single job-runner module that takes user-specified arguments.</p>
</blockquote>
</aside>
<p>I see. That use case makes a lot of sense. I’m fully in favor of helping consolidate dependencies <img src="https://forum.elixirforum.com/images/emoji/apple/slightly_smiling_face.png?v=15" title=":slightly_smiling_face:" class="emoji" alt=":slightly_smiling_face:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="AndyL" data-post="152" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andyl/48/3659_2.png" class="avatar"> AndyL:</div>
<blockquote>
<p>I’m just reading the <code>Crontab.Scheduler</code> source now. To make this work I might need a custom version of the <code>enqueue_jobs</code> function, or maybe I would tweak the <code>Oban.Config</code> genserver to add an <code>update_crontab</code> function.</p>
</blockquote>
</aside>
<p>There are a few barriers in place that make it impossible to modify the scheduler state without some major hacks:</p>
<ol>
<li>There aren’t any functions to modify the <code>Config</code> after the system starts</li>
<li>If you do modify the config through <code>Agent.update/3</code>, that won’t get into the scheduler instance</li>
<li>If you use <code>:sys.replace_state/2</code> to reach in and change the config stored in the scheduler process it will only apply on the current node, it won’t scale horizontally</li>
</ol>
<p>The way to do this properly would be to add top level functions such as <code>Oban.put_cron</code>, <code>Oban.delete_cron</code>, and <code>Oban.update_cron</code>. Those would use notifications to broadcast cron changes and each node would then handle the update locally. That is how other functions like <code>start_queue</code> and <code>stop_queue</code> work.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="157881" data-batch-url="/posts/batch_likers">
                        3
                      </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/oban-reliable-and-observable-job-processing/22449/153">Post #152</a>
	                </div>
	            </div>
              <div id="likers-container-157881" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="157881"
                     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 #152"></div>
  </section>
</div>
    <div class="postbit" id="157886" data-post-id="157886">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/sorentwo" rel="nofollow">@sorentwo</a> thanks for the hints I’ll add a new function  <code>Oban.update_cron</code> and support to dynamically update  <code>Config</code> state.  I’ll post updates to the <a href="https://github.com/sorentwo/oban/issues/146" rel="noopener nofollow ugc">issue #146</a> on the Oban repo.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="157886" 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/oban-reliable-and-observable-job-processing/22449/154">Post #153</a>
	                </div>
	            </div>
              <div id="likers-container-157886" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="157886"
                     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 #153"></div>
  </section>
</div>
    <div class="postbit" id="159544" data-post-id="159544">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <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 class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Today I’m <strong>very excited</strong> to announce the release of <a href="https://hexdocs.pm/oban/1.0.0-rc.1/Oban.html" rel="noopener nofollow ugc">Oban v1.0.0-rc.1</a>. This release has been a long time coming and it packs a lot of new features, performance improvements, stability fixes and updated defaults for pruning and heartbeats. If there aren’t any regressions or breaking changes then I’ll release 1.0.0 in one week.</p>
<p>This release does <strong>require a migration</strong>, but I crammed as many features as I could into it: priority jobs, tags, a <code>discarded_at</code> timestamp and a massively improved notifications trigger.</p>
<p>Thanks to everybody that contributed and reported issues. <img src="https://forum.elixirforum.com/images/emoji/apple/yellow_heart.png?v=15" title=":yellow_heart:" class="emoji" alt=":yellow_heart:" loading="lazy" width="20" height="20"></p>
<hr>
<p>From the <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#100-rc1--2020-01-21" rel="noopener nofollow ugc">CHANGELOG</a>:</p>
<p><strong>Migration Required (V8)</strong></p>
<p>This is the first required migration since 0.8.0, released in 09/2019. It brings with it a new column, <code>discarded_at</code>, a streamlined notifications trigger, job prioritiy and job tags.</p>
<h3><a name="p-159544-added-1" class="anchor" href="#p-159544-added-1" aria-label="Heading link" rel="nofollow"></a>Added</h3>
<ul>
<li>
<p>[Oban] Add <code>timezone</code> support for scheduling cronjobs using timezones other than “Etc/UTC”. Using a custom timezone requires a timezone database such as tzdata.</p>
</li>
<li>
<p>[Oban] Add <code>dispatch_cooldown</code> option to configure the minimum time between a producer fetching more jobs to execute.</p>
</li>
<li>
<p>[Oban] Add <code>beats_maxage</code> option to configure how long heartbeat rows are retained in the <code>oban_beats</code> table. Each queue generates one row per second, so rows may accumulate quickly. The default value is now five minutes, down from one hour previously.</p>
</li>
<li>
<p>[Oban.Job] Add <code>discarded_at</code> timestamp to help identify jobs that were discarded and not completed. The timestamp is added by the V8 migration and it is also included in the original <code>create table</code> from V1 as a minor space saving optimization (packing datetime columns together because they use a predictable 4bytes of space).</p>
</li>
<li>
<p>[Oban.Job] Add numerical <code>priority</code> value to control the order of execution for jobs within a queue. The <code>priority</code> can be set between 0 and 3, with 0 being the default and the highest priority.</p>
</li>
<li>
<p>[Oban.Job] Add <code>tags</code> field for arbitrarily organizing associated tags. Tags are a list of strings stored as an <code>array</code> in the database, making them easy to search and filter by.</p>
</li>
</ul>
<h3><a name="p-159544-changed-2" class="anchor" href="#p-159544-changed-2" aria-label="Heading link" rel="nofollow"></a>Changed</h3>
<ul>
<li>
<p>[Oban] Change the default <code>prune</code> value from <code>:disabled</code> to <code>{:maxlen, 1_000}</code>. Many people don’t change the default until they realize that a lot of jobs are lingering in the database. It is rare that anybody would want to keep all of their jobs forever, so a conservative default is better than <code>:disabled</code>.</p>
</li>
<li>
<p>[Oban] Change <code>oban_beats</code> retention from one hour to five minutes. The value is now configurable, with a default of <code>300s</code>. The lower bound is <code>60s</code> because we require one minute of heartbeat activity to rescue orphaned jobs.</p>
</li>
<li>
<p>[Oban.Queue.Producer] Introduce “dispatch cooldown” as a way to debounce repeatedly fetching new jobs. Repeated fetching floods the producer’s message queue and forces the producer to repeatedly fetch one job at a time, which is not especially efficient. Debounced fetching is much more efficient for the producer and the database, increasing maximum jobs/sec throughput so that it scales linearly with a queue’s concurrency settings (up to what the database can handle).</p>
</li>
<li>
<p>[Oban.Query] Discard jobs that have exhausted the maximum attempts rather than rescuing them. This prevents repeatedly attempting a job that has consistently crashed the BEAM.</p>
</li>
<li>
<p>[Oban.Query] Use transactional locks to prevent duplicate inserts without relying on unique constraints in the database. This provides strong unique guarantees without requiring migrations.</p>
</li>
</ul>
<h3><a name="p-159544-removed-3" class="anchor" href="#p-159544-removed-3" aria-label="Heading link" rel="nofollow"></a>Removed</h3>
<ul>
<li>[Oban.Notifications] An overhauled and simplified insert trigger no longer emits <code>update</code> notifications. This was largely an internal implementation detail and wasn’t publicly documented, but it does effect the UI.</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159544" data-batch-url="/posts/batch_likers">
                        25
                      </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/oban-reliable-and-observable-job-processing/22449/155">Post #154</a>
	                </div>
	            </div>
              <div id="likers-container-159544" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159544"
                     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 #154"></div>
  </section>
</div>
    <div class="postbit" id="159563" data-post-id="159563">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Incredible, very impressed with the pace of features and general stability of the project, great stuff <a class="mention" href="/u/sorentwo" rel="nofollow">@sorentwo</a>, thank you!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159563" data-batch-url="/posts/batch_likers">
                        14
                      </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/oban-reliable-and-observable-job-processing/22449/156">Post #155</a>
	                </div>
	            </div>
              <div id="likers-container-159563" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159563"
                     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 #155"></div>
  </section>
</div>
    <div class="postbit" id="159573" data-post-id="159573">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I added Oban to our product a couple weeks ago and it’s been fantastic. Great job <a class="mention" href="/u/sorentwo" rel="nofollow">@sorentwo</a>!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159573" data-batch-url="/posts/batch_likers">
                        5
                      </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/oban-reliable-and-observable-job-processing/22449/157">Post #156</a>
	                </div>
	            </div>
              <div id="likers-container-159573" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159573"
                     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 #156"></div>
  </section>
</div>
    <div class="postbit" id="159700" data-post-id="159700">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sorentwo" data-post="155" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/48/37360_2.png" class="avatar"> sorentwo:</div>
<blockquote>
<p>This release does <strong>require a migration</strong> , but I crammed as many features as I could into it: priority jobs, tags, a <code>discarded_at</code> timestamp and a massively improved notifications trigger.</p>
</blockquote>
</aside>
<p>Quick question, can the migration be run before upgrading? Basically I want to deploy the update with minimal downtime.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159700" 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/oban-reliable-and-observable-job-processing/22449/158">Post #157</a>
	                </div>
	            </div>
              <div id="likers-container-159700" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159700"
                     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 #157"></div>
  </section>
</div>
    <div class="postbit" id="159704" data-post-id="159704">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Is there a way to configure Oban for an umbrella app which has three apps: app_db, app_jobs, app_api where app_db has AppDb.Repo, app_jobs is the app dedicated to timed execution and app_api is the app with the Endpoint? The way the example docs describe setting up the supervision tree, this appears impossible.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159704" 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/oban-reliable-and-observable-job-processing/22449/159">Post #158</a>
	                </div>
	            </div>
              <div id="likers-container-159704" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159704"
                     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 #158"></div>
  </section>
</div>
    <div class="postbit" id="159742" data-post-id="159742">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <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 class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="axelson" data-post="158" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/48/26351_2.png" class="avatar"> axelson:</div>
<blockquote>
<p>Quick question, can the migration be run before upgrading? Basically I want to deploy the update with minimal downtime.</p>
</blockquote>
</aside>
<p>You can deploy the update with no downtime. There are a few features and scenarios to consider:</p>
<ul>
<li>If you use a <code>migrator</code> in your supervision tree you can be sure that the migrations run before oban starts. Be sure that migrator module runs after the Ecto repo is started and before Oban is started.</li>
<li>The migration is backward compatible, meaning that running instances of older oban versions can keep running while you run migrations.</li>
<li>If there are any issues circuit breakers will repeatedly trip while it waits for the migration to complete. That means you may not process any jobs for 30+ seconds, but it won’t bring down your application.</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159742" data-batch-url="/posts/batch_likers">
                        4
                      </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/oban-reliable-and-observable-job-processing/22449/160">Post #159</a>
	                </div>
	            </div>
              <div id="likers-container-159742" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159742"
                     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 #159"></div>
  </section>
</div>
    <div class="postbit" id="159743" data-post-id="159743">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <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 class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="maz" data-post="159" data-topic="22449" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/maz/48/6075_2.png" class="avatar"> maz:</div>
<blockquote>
<p>Is there a way to configure Oban for an umbrella app which has three apps: app_db, app_jobs, app_api where app_db has AppDb.Repo, app_jobs is the app dedicated to timed execution and app_api is the app with the Endpoint? The way the example docs describe setting up the supervision tree, this appears impossible.</p>
</blockquote>
</aside>
<p>Sure, that is entirely possible. They are separate apps but they run in the same instances and I imagine there are dependencies within the umbrella (<code>in_umbrella: true</code>). As long as <code>app_jobs</code> depends on <code>app_db</code> you can access the <code>app_db</code> Ecto repo:</p>
<pre data-code-wrap="eliixr"><code class="lang-eliixr">config :app_jobs, repo: AppDb.Repo, queues: [default: 10] # other config
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159743" 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/oban-reliable-and-observable-job-processing/22449/161">Post #160</a>
	                </div>
	            </div>
              <div id="likers-container-159743" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159743"
                     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 #160"></div>
  </section>
</div>
    <div class="postbit" id="159744" data-post-id="159744">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Great, thanks for the info!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="159744" 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/oban-reliable-and-observable-job-processing/22449/162">Post #161</a>
	                </div>
	            </div>
              <div id="likers-container-159744" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="159744"
                     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 #161"></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/22449/load_more?page=17">Load more posts (151 remaining)</a>
</div></template></turbo-stream>