title: Difference between Laravel queued event listeners vs jobs
body: <p>I'm trying to wrap my head around Laravel's <a href="https://laravel.com/docs/5.4/events#queued-event-listeners" rel="noreferrer">queued event listener</a> vs <a href="https://laravel.com/docs/5.4/queues#creating-jobs" rel="noreferrer">jobs</a>.</p>
  
  <p>To me, it seems like that both are very similar:  </p>
  
  <ol>
  <li>Both implement the <code>ShouldQueue</code> interface (in the case of event listener, this is an option)</li>
  <li>Both implement the <code>handle()</code> and <code>failed()</code> (optional) methods to perform their respective tasks.</li>
  </ol>
  
  <p>Essentially, to me, both are queued items that can be run asynchronously.</p>
  
  <p>What I am able to distinguish so far is that jobs have more <em>"advanced"</em> features/configurations like <code>$timeout</code>, <code>$tries</code> properties and you may also delay the 'trigger' of a job (courtesy of the <code>Illuminate\Bus\Queueable</code> trait).  </p>
  
  <p>There are more I'm sure, but I'm pointing out the one that pops out to me.</p>
  
  <p>So, the question is, what's the actual difference between the two and more importantly, when do you favor one over the other? </p>