<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>RabbitMQ source connector · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The RabbitMQ source connector receives messages from RabbitMQ clusters "/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="RabbitMQ source connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.apache.org/"/><meta property="og:description" content="The RabbitMQ source connector receives messages from RabbitMQ clusters "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.apache.org/blog/atom.xml" title="Apache Pulsar Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://pulsar.apache.org/blog/feed.xml" title="Apache Pulsar Blog RSS Feed"/><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/en"><img class="logo" src="/img/pulsar.svg" alt="Apache Pulsar"/></a><a href="/en/versions"><h3>next</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/en/next/getting-started-standalone" target="_self">Docs</a></li><li class=""><a href="/en/download" target="_self">Download</a></li><li class=""><a href="/docs/en/next/client-libraries" target="_self">Clients</a></li><li class=""><a href="#restapis" target="_self">REST APIs</a></li><li class=""><a href="#cli" target="_self">Cli</a></li><li class=""><a href="/blog/" target="_self">Blog</a></li><li class=""><a href="#community" target="_self">Community</a></li><li class=""><a href="#apache" target="_self">Apache</a></li><li class=""><a href="https://pulsar-next.staged.apache.org/" target="_self">New Website (Beta)</a></li><span><li><a id="languages-menu" href="#"><img class="languages-icon" src="/img/language.svg" alt="Languages icon"/>English</a><div id="languages-dropdown" class="hide"><ul id="languages-dropdown-items"><li><a href="/docs/ja/next/io-rabbitmq-source">日本語</a></li><li><a href="/docs/fr/next/io-rabbitmq-source">Français</a></li><li><a href="/docs/ko/next/io-rabbitmq-source">한국어</a></li><li><a href="/docs/zh-CN/next/io-rabbitmq-source">中文</a></li><li><a href="/docs/zh-TW/next/io-rabbitmq-source">繁體中文</a></li><li><a href="https://crowdin.com/project/apache-pulsar" target="_blank" rel="noreferrer noopener">Help Translate</a></li></ul></div></li><script>
        const languagesMenuItem = document.getElementById("languages-menu");
        const languagesDropDown = document.getElementById("languages-dropdown");
        languagesMenuItem.addEventListener("click", function(event) {
          event.preventDefault();

          if (languagesDropDown.className == "hide") {
            languagesDropDown.className = "visible";
          } else {
            languagesDropDown.className = "hide";
          }
        });
      </script></span></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/io-rabbitmq-source.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">RabbitMQ source connector</h1></header><article><div><span><p>The RabbitMQ source connector receives messages from RabbitMQ clusters
and writes messages to Pulsar topics.</p>
<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Configuration</h2>
<p>The configuration of the RabbitMQ source connector has the following properties.</p>
<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Property</h3>
<table>
<thead>
<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td><code>connectionName</code></td><td>String</td><td>true</td><td>&quot; &quot; (empty string)</td><td>The connection name.</td></tr>
<tr><td><code>host</code></td><td>String</td><td>true</td><td>&quot; &quot; (empty string)</td><td>The RabbitMQ host.</td></tr>
<tr><td><code>port</code></td><td>int</td><td>true</td><td>5672</td><td>The RabbitMQ port.</td></tr>
<tr><td><code>virtualHost</code></td><td>String</td><td>true</td><td>/</td><td>The virtual host used to connect to RabbitMQ.</td></tr>
<tr><td><code>username</code></td><td>String</td><td>false</td><td>guest</td><td>The username used to authenticate to RabbitMQ.</td></tr>
<tr><td><code>password</code></td><td>String</td><td>false</td><td>guest</td><td>The password used to authenticate to RabbitMQ.</td></tr>
<tr><td><code>queueName</code></td><td>String</td><td>true</td><td>&quot; &quot; (empty string)</td><td>The RabbitMQ queue name that messages should be read from or written to.</td></tr>
<tr><td><code>requestedChannelMax</code></td><td>int</td><td>false</td><td>0</td><td>The initially requested maximum channel number. <br><br>0 means unlimited.</td></tr>
<tr><td><code>requestedFrameMax</code></td><td>int</td><td>false</td><td>0</td><td>The initially requested maximum frame size in octets. <br><br>0 means unlimited.</td></tr>
<tr><td><code>connectionTimeout</code></td><td>int</td><td>false</td><td>60000</td><td>The timeout of TCP connection establishment in milliseconds. <br><br>0 means infinite.</td></tr>
<tr><td><code>handshakeTimeout</code></td><td>int</td><td>false</td><td>10000</td><td>The timeout of AMQP0-9-1 protocol handshake in milliseconds.</td></tr>
<tr><td><code>requestedHeartbeat</code></td><td>int</td><td>false</td><td>60</td><td>The requested heartbeat timeout in seconds.</td></tr>
<tr><td><code>prefetchCount</code></td><td>int</td><td>false</td><td>0</td><td>The maximum number of messages that the server delivers.<br><br> 0 means unlimited.</td></tr>
<tr><td><code>prefetchGlobal</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether the setting should be applied to the entire channel rather than each consumer.</td></tr>
<tr><td><code>passive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether the rabbitmq consumer should create its own queue or bind to an existing one.</td></tr>
</tbody>
</table>
<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Example</h3>
<p>Before using the RabbitMQ source connector, you need to create a configuration file through one of the following methods.</p>
<ul>
<li><p>JSON</p>
<pre><code class="hljs css language-json">{
   <span class="hljs-attr">"configs"</span>: {
      <span class="hljs-attr">"host"</span>: <span class="hljs-string">"localhost"</span>,
      <span class="hljs-attr">"port"</span>: <span class="hljs-string">"5672"</span>,
      <span class="hljs-attr">"virtualHost"</span>: <span class="hljs-string">"/"</span>,
      <span class="hljs-attr">"username"</span>: <span class="hljs-string">"guest"</span>,
      <span class="hljs-attr">"password"</span>: <span class="hljs-string">"guest"</span>,
      <span class="hljs-attr">"queueName"</span>: <span class="hljs-string">"test-queue"</span>,
      <span class="hljs-attr">"connectionName"</span>: <span class="hljs-string">"test-connection"</span>,
      <span class="hljs-attr">"requestedChannelMax"</span>: <span class="hljs-string">"0"</span>,
      <span class="hljs-attr">"requestedFrameMax"</span>: <span class="hljs-string">"0"</span>,
      <span class="hljs-attr">"connectionTimeout"</span>: <span class="hljs-string">"60000"</span>,
      <span class="hljs-attr">"handshakeTimeout"</span>: <span class="hljs-string">"10000"</span>,
      <span class="hljs-attr">"requestedHeartbeat"</span>: <span class="hljs-string">"60"</span>,
      <span class="hljs-attr">"prefetchCount"</span>: <span class="hljs-string">"0"</span>,
      <span class="hljs-attr">"prefetchGlobal"</span>: <span class="hljs-string">"false"</span>,
      <span class="hljs-attr">"passive"</span>: <span class="hljs-string">"false"</span>
   }
}
</code></pre></li>
<li><p>YAML</p>
<pre><code class="hljs css language-yaml"><span class="hljs-attr">configs:</span>
    <span class="hljs-attr">host:</span> <span class="hljs-string">"localhost"</span>
    <span class="hljs-attr">port:</span> <span class="hljs-number">5672</span>
    <span class="hljs-attr">virtualHost:</span> <span class="hljs-string">"/"</span>
    <span class="hljs-attr">username:</span> <span class="hljs-string">"guest"</span>
    <span class="hljs-attr">password:</span> <span class="hljs-string">"guest"</span>
    <span class="hljs-attr">queueName:</span> <span class="hljs-string">"test-queue"</span>
    <span class="hljs-attr">connectionName:</span> <span class="hljs-string">"test-connection"</span>
    <span class="hljs-attr">requestedChannelMax:</span> <span class="hljs-number">0</span>
    <span class="hljs-attr">requestedFrameMax:</span> <span class="hljs-number">0</span>
    <span class="hljs-attr">connectionTimeout:</span> <span class="hljs-number">60000</span>
    <span class="hljs-attr">handshakeTimeout:</span> <span class="hljs-number">10000</span>
    <span class="hljs-attr">requestedHeartbeat:</span> <span class="hljs-number">60</span>
    <span class="hljs-attr">prefetchCount:</span> <span class="hljs-number">0</span>
    <span class="hljs-attr">prefetchGlobal:</span> <span class="hljs-string">"false"</span>
    <span class="hljs-attr">passive:</span> <span class="hljs-string">"false"</span>
</code></pre></li>
</ul>
</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2022 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
      const community = document.querySelector("a[href='#community']").parentNode;
      const communityMenu =
        '<li>' +
        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
        '<div id="community-dropdown" class="hide">' +
          '<ul id="community-dropdown-items">' +
            '<li><a href="/en/contact">Contact</a></li>' +
            '<li><a href="/en/contributing">Contributing</a></li>' +
            '<li><a href="/en/coding-guide">Coding guide</a></li>' +
            '<li><a href="/en/events">Events</a></li>' +
            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
            '<li><a href="https://pulsar-summit.org/" target="_blank">Pulsar Summit &#x2750</a></li>' +
            '<li>&nbsp;</li>' +
            '<li><a href="/en/resources">Resources</a></li>' +
            '<li><a href="/en/team">Team</a></li>' +
            '<li><a href="/en/powered-by">Powered By</a></li>' +
          '</ul>' +
        '</div>' +
        '</li>';

      community.innerHTML = communityMenu;

      const communityMenuItem = document.getElementById("community-menu");
      const communityDropDown = document.getElementById("community-dropdown");
      communityMenuItem.addEventListener("click", function(event) {
        event.preventDefault();

        if (communityDropDown.className == 'hide') {
          communityDropDown.className = 'visible';
        } else {
          communityDropDown.className = 'hide';
        }
      });
    </script></span></footer></div><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script></body></html>