PageSourceSearch

https://www.rabbitmq.com/assets/js/e41ad8b1.adc2a8bb.js

js rabbitmq.com collected 2026-10-01 06:33:04 UTC 34,430 bytes, 2 lines download raw bytes

1"use strict";(self.webpackChunkrabbitmq_website=self.webpackChunkrabbitmq_website||[]).push([["20238"],{13252(e,r,t){t.r(r),t.d(r,{metadata:()=>i,default:()=>R,frontMatter:()=>g,contentTitle:()=>w,toc:()=>q,assets:()=>y});var i=JSON.parse('{"id":"index","title":"RabbitMQ Tutorials","description":"\x3c!--","source":"@site/tutorials/index.md","sourceDirName":".","slug":"/","permalink":"/tutorials/","draft":false,"unlisted":false,"editUrl":"https://github.com/rabbitmq/rabbitmq-website/tree/main/tutorials/index.md","tags":[],"version":"current","frontMatter":{"title":"RabbitMQ Tutorials"},"sidebar":"tutorialsSidebar","next":{"title":"Hello World","permalink":"/tutorials/tutorial-one-python"}}'),l=t(74848),n=t(28453),s=t(50773),a=t(57250);let o=[];function h(e){let r={mermaid:"mermaid",...(0,n.R)(),...e.components};return(0,l.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    Q[[Queue]]\n    C((C))\n\n    P --\x3e Q --\x3e C\n\n    class P mermaid-producer\n    class Q mermaid-queue\n    class C mermaid-consumer"})}function u(e={}){let{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,l.jsx)(r,{...e,children:(0,l.jsx)(h,{...e})}):h(e)}var c=t(69448),d=t(13203),x=t(6462),j=t(47817),m=t(89380);function p(e){let r={mermaid:"mermaid",...(0,n.R)(),...e.components};return(0,l.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    Q[[Stream-Queue]]\n    C((C))\n\n    P --\x3e Q --\x3e C\n\n    class P mermaid-producer\n    class Q mermaid-queue\n    class C mermaid-consumer"})}function f(e={}){let{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,l.jsx)(r,{...e,children:(0,l.jsx)(p,{...e})}):p(e)}function b(e){let r={mermaid:"mermaid",...(0,n.R)(),...e.components};return(0,l.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    Q[[Stream-Queue]]\n    C((C))\n\n    P --\x3e Q <--\x3e C\n\n    class P mermaid-producer\n    class Q mermaid-queue\n    class C mermaid-consumer"})}function v(e={}){let{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,l.jsx)(r,{...e,children:(0,l.jsx)(b,{...e})}):b(e)}let g={title:"RabbitMQ Tutorials"},w="RabbitMQ Tutorials",y={},q=[{value:"Queue tutorials with AMQP 1.0",id:"queue-amqp-tutorials",level:3},{value:"1. &quot;Hello World!&quot;",id:"1-hello-world",level:2},...o,{value:"2. Work Queues",id:"2-work-queues",level:2},...c.RM,{value:"3. Publish/Subscribe",id:"3-publishsubscribe",level:2},...d.RM,{value:"4. Routing",id:"4-routing",level:2},...x.RM,{value:"5. Topics",id:"5-topics",level:2},...j.RM,{value:"6. RPC",id:"6-rpc",level:2},...m.RM,{value:"Queue tutorials",id:"queue-tutorials",level:3},{value:"1. &quot;Hello World!&quot;",id:"1-hello-world-1",level:2},...o,{value:"2. Work Queues",id:"2-work-queues-1",level:2},...c.RM,{value:"3. Publish/Subscribe",id:"3-publishsubscribe-1",level:2},...d.RM,{value:"4. Routing",id:"4-routing-1",level:2},...x.RM,{value:"5. Topics",id:"5-topics-1",level:2},...j.RM,{value:"6. RPC",id:"6-rpc-1",level:2},...m.RM,{value:"7. Publisher Confirms",id:"7-publisher-confirms",level:2},{value:"AMQP 0-9-1 Overview",id:"amqp-0-9-1-overview",level:2},{value:"Stream tutorials",id:"stream-tutorials",level:2},{value:"1. &quot;Hello World!&quot;",id:"1-hello-world-2",level:2},{value:"2. Offset Tracking",id:"2-offset-tracking",level:2},{value:"Stream Overview and Blog Posts",id:"stream-overview-and-blog-posts",level:2},{value:"Getting Help",id:"getting-help",level:2},{value:"Tutorials in Other Languages",id:"tutorials-in-other-languages",level:2}];function Q(e){let r={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r.header,{children:(0,l.jsx)(r.h1,{id:"rabbitmq-tutorials",children:"RabbitMQ Tutorials"})}),"\n",(0,l.jsx)(r.p,{children:"These tutorials cover the basics of creating messaging\napplications using RabbitMQ."}),"\n",(0,l.jsxs)(r.p,{children:["You need to have the RabbitMQ server installed to go through the tutorials,\nplease see the ",(0,l.jsx)(r.a,{href:"/docs/download",children:"installation guide"})," or use the ",(0,l.jsx)(r.a,{href:"https://hub.docker.com/_/rabbitmq/",children:"community Docker image"}),"."]}),"\n",(0,l.jsxs)(r.p,{children:["Executable versions of these tutorials ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials",children:"are open source"}),",\nas is ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-website",children:"this website"}),"."]}),"\n",(0,l.jsx)(r.p,{children:"There are three groups of tutorials:"}),"\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"#queue-amqp-tutorials",children:"RabbitMQ queues with AMQP 1.0"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"#queue-tutorials",children:"RabbitMQ queues with AMQP 0.9.1"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"#stream-tutorials",children:"RabbitMQ streams"})}),"\n"]}),"\n",(0,l.jsx)(r.admonition,{type:"info",children:(0,l.jsx)(r.p,{children:"These tutorials target RabbitMQ 4.x."})}),"\n",(0,l.jsxs)(s.A,{groupId:"protocol",children:[(0,l.jsxs)(a.A,{value:"amqp-10",label:"AMQP 1.0",default:!0,children:[(0,l.jsx)(r.h3,{id:"queue-amqp-tutorials",children:"Queue tutorials with AMQP 1.0"}),(0,l.jsx)(r.p,{children:"This section covers the modern messaging protocol in RabbitMQ, AMQP 1.0. This protocol works\nout of the box, without enabling any plugin."}),(0,l.jsxs)("table",{id:"tutorials-amqp10",children:[(0,l.jsxs)("colgroup",{children:[(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-one",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"1-hello-world",children:'1. "Hello World!"'}),(0,l.jsxs)(r.p,{children:["The simplest thing that does ",(0,l.jsx)(r.em,{children:"something"})]}),(0,l.jsx)(u,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-go-amqp10",children:"Go"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-two",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"2-work-queues",children:"2. Work Queues"}),(0,l.jsxs)(r.p,{children:["Distributing tasks among workers (the ",(0,l.jsx)("a",{href:"http://www.enterpriseintegrationpatterns.com/patterns/messaging/CompetingConsumers.html",target:"_blank",children:"competing consumers pattern"}),")"]}),(0,l.jsx)(c.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-go-amqp10",children:"Go"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-three",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"3-publishsubscribe",children:"3. Publish/Subscribe"}),(0,l.jsx)(r.p,{children:"Sending messages to many consumers at once"}),(0,l.jsx)(d.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-go-amqp10",children:"Go"})}),"\n"]})]})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-four",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"4-routing",children:"4. Routing"}),(0,l.jsx)(r.p,{children:"Receiving messages selectively"}),(0,l.jsx)(x.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-go-amqp10",children:"Go"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-five",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"5-topics",children:"5. Topics"}),(0,l.jsx)(r.p,{children:"Receiving messages based on a pattern (topics)"}),(0,l.jsx)(j.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-go-amqp10",children:"Go"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-six",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"6-rpc",children:"6. RPC"}),(0,l.jsxs)(r.p,{children:[(0,l.jsx)("a",{href:"http://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReply.html",target:"_blank",children:"Request/reply pattern"})," example"]}),(0,l.jsx)(m.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-java-amqp10",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-dotnet-amqp10",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-go-amqp10",children:"Go"})}),"\n"]})]})]})]})]}),(0,l.jsxs)(a.A,{value:"amqp-091",label:"AMQP 0-9-1",children:[(0,l.jsx)(r.h3,{id:"queue-tutorials",children:"Queue tutorials"}),(0,l.jsx)(r.p,{children:"This section covers the default RabbitMQ protocol, AMQP 0-9-1."}),(0,l.jsxs)("table",{id:"tutorials",children:[(0,l.jsxs)("colgroup",{children:[(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-one",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"1-hello-world-1",children:'1. "Hello World!"'}),(0,l.jsxs)(r.p,{children:["The simplest thing that does ",(0,l.jsx)(r.em,{children:"something"})]}),(0,l.jsx)(u,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-swift",children:"Swift"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-spring-amqp",children:"Spring AMQP"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-two",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"2-work-queues-1",children:"2. Work Queues"}),(0,l.jsxs)(r.p,{children:["Distributing tasks among workers (the ",(0,l.jsx)("a",{href:"http://www.enterpriseintegrationpatterns.com/patterns/messaging/CompetingConsumers.html",target:"_blank",children:"competing consumers pattern"}),")"]}),(0,l.jsx)(c.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-swift",children:"Swift"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-spring-amqp",children:"Spring AMQP"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-three",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"3-publishsubscribe-1",children:"3. Publish/Subscribe"}),(0,l.jsx)(r.p,{children:"Sending messages to many consumers at once"}),(0,l.jsx)(d.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-swift",children:"Swift"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-three-spring-amqp",children:"Spring AMQP"})}),"\n"]})]})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-four",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"4-routing-1",children:"4. Routing"}),(0,l.jsx)(r.p,{children:"Receiving messages selectively"}),(0,l.jsx)(x.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-swift",children:"Swift"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-four-spring-amqp",children:"Spring AMQP"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-five",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"5-topics-1",children:"5. Topics"}),(0,l.jsx)(r.p,{children:"Receiving messages based on a pattern (topics)"}),(0,l.jsx)(j.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-kotlin",children:"Kotlin"})}),"\n",
1(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-swift",children:"Swift"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-five-spring-amqp",children:"Spring AMQP"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-six",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"6-rpc-1",children:"6. RPC"}),(0,l.jsxs)(r.p,{children:[(0,l.jsx)("a",{href:"http://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReply.html",target:"_blank",children:"Request/reply pattern"})," example"]}),(0,l.jsx)(m.Ay,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-python",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-javascript",children:"JavaScript"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-go",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-elixir",children:"Elixir"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-six-spring-amqp",children:"Spring AMQP"})}),"\n"]})]})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-seven",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"7-publisher-confirms",children:"7. Publisher Confirms"}),(0,l.jsx)(r.p,{children:"Reliable publishing with publisher confirms"}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-java",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-kotlin",children:"Kotlin"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-ruby",children:"Ruby"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-dotnet",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-php",children:"PHP"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-seven-go",children:"Go"})}),"\n"]})]}),(0,l.jsx)("td",{class:"tutorial-empty"}),(0,l.jsx)("td",{class:"tutorial-empty"})]})]}),(0,l.jsx)(r.h2,{id:"amqp-0-9-1-overview",children:"AMQP 0-9-1 Overview"}),(0,l.jsxs)(r.p,{children:["Once you have been through the tutorials (or if you want to\nskip ahead), you may wish to read an\n",(0,l.jsx)(r.a,{href:"/tutorials/amqp-concepts",children:"Introduction to RabbitMQ Concepts"}),"\nand take a look at the ",(0,l.jsx)(r.a,{href:"/docs/specification",children:"Compatibility and Conformance page"}),"\nto find relevant resources to learn more about AMQP 1.0 and AMQP 0-9-1,\nthe two core protocols implemented by RabbitMQ."]})]})]}),"\n",(0,l.jsx)(r.h2,{id:"stream-tutorials",children:"Stream tutorials"}),"\n",(0,l.jsxs)(r.p,{children:["This section covers ",(0,l.jsx)(r.a,{href:"/docs/streams",children:"RabbitMQ streams"}),"."]}),"\n",(0,l.jsxs)("table",{id:"stream-tutorials",children:[(0,l.jsxs)("colgroup",{children:[(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}}),(0,l.jsx)("col",{span:"1",style:{width:"33%"}})]}),(0,l.jsxs)("tr",{children:[(0,l.jsxs)("td",{id:"tutorial-one",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"1-hello-world-2",children:'1. "Hello World!"'}),(0,l.jsxs)(r.p,{children:["The simplest thing that does ",(0,l.jsx)(r.em,{children:"something"})]}),(0,l.jsx)(f,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-java-stream",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-dotnet-stream",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-go-stream",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-python-stream",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-rust-stream",children:"Rust"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-one-javascript-stream",children:"Node.js"})}),"\n"]})]}),(0,l.jsxs)("td",{id:"tutorial-two",style:{verticalAlign:"top"},children:[(0,l.jsx)(r.h2,{id:"2-offset-tracking",children:"2. Off
1set Tracking"}),(0,l.jsx)(r.p,{children:"Keep track of message processing"}),(0,l.jsx)(v,{}),(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-java-stream",children:"Java"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-dotnet-stream",children:"C#"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-go-stream",children:"Go"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-python-stream",children:"Python"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-rust-stream",children:"Rust"})}),"\n",(0,l.jsx)(r.li,{children:(0,l.jsx)(r.a,{href:"tutorials/tutorial-two-javascript-stream",children:"Node.js"})}),"\n"]})]})]})]}),"\n",(0,l.jsx)(r.h2,{id:"stream-overview-and-blog-posts",children:"Stream Overview and Blog Posts"}),"\n",(0,l.jsxs)(r.p,{children:["Once you have been through the tutorials (or if you want to\nskip ahead), you may wish to read the\n",(0,l.jsx)(r.a,{href:"/docs/streams",children:"RabbitMQ stream documentation"}),"\nand browse our\n",(0,l.jsx)(r.a,{href:"/blog/tags/streams",children:"stream blog posts"}),"."]}),"\n",(0,l.jsx)(r.h2,{id:"getting-help",children:"Getting Help"}),"\n",(0,l.jsxs)(r.p,{children:["If you have any questions or comments regarding RabbitMQ, feel free to\nask them on ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-server/discussions",children:"GitHub Discussion"})," or\n",(0,l.jsx)(r.a,{href:"https://www.rabbitmq.com/discord",children:"RabbitMQ community Discord server"}),"."]}),"\n",(0,l.jsx)(r.h2,{id:"tutorials-in-other-languages",children:"Tutorials in Other Languages"}),"\n",(0,l.jsxs)(r.p,{children:["The tutorials here use a number of popular technologies,\nhowever, there are ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials",children:"ports available"})," for\nmany more languages and client libraries, for example:"]}),"\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsxs)(r.li,{children:["Rust using ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/rust-amqprs",children:"amqprs"})]}),"\n",(0,l.jsxs)(r.li,{children:["Rust using ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/rust-lapin",children:"Lapin"})]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/clojure",children:"Clojure"})," (using ",(0,l.jsx)(r.a,{href:"https://github.com/michaelklishin/langohr",children:"Langohr"}),")"]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/erlang",children:"Erlang"})," (using ",(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-erlang-client",children:"RabbitMQ Erlang client"}),")"]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/haskell",children:"Haskell"})," (using ",(0,l.jsx)(r.a,{href:"http://hackage.haskell.org/package/amqp",children:"Network.AMQP"}),")"]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/perl",children:"Perl"})," (using ",(0,l.jsx)(r.a,{href:"https://github.com/cooldaemon/RabbitFoot",children:"Net::RabbitFoot"}),")"]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/oylenshpeegul/RabbitMQ-Tutorial-Perl",children:"Perl"})," (using ",(0,l.jsx)(r.a,{href:"http://p3rl.org/Net::AMQP::RabbitMQ",children:"Net::AMQP::RabbitMQ"}),")"]}),"\n",(0,l.jsxs)(r.li,{children:[(0,l.jsx)(r.a,{href:"https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/scala",children:"Scala"})," (using ",(0,l.jsx)(r.a,{href:"/client-libraries/java-api-guide",children:"RabbitMQ Java client"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(r.p,{children:["We also maintain a list of community-developed ",(0,l.jsx)(r.a,{href:"/client-libraries/devtools",children:"clients and developer tools"}),"\nfor various protocols RabbitMQ supports."]})]})}function R(e={}){let{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,l.jsx)(r,{...e,children:(0,l.jsx)(Q,{...e})}):Q(e)}},69448(e,r,t){t.d(r,{Ay:()=>a,RM:()=>n});var i=t(74848),l=t(28453);let n=[];function s(e){let r={mermaid:"mermaid",...(0,l.R)(),...e.components};return(0,i.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    Q[[Queue]]\n    C1((C\u2081))\n    C2((C\u2082))\n\n    P --\x3e Q --\x3e C1 & C2\n\n    class P mermaid-producer\n    class Q mermaid-queue\n    class C1 mermaid-consumer\n    class C2 mermaid-consumer"})}function a(e={}){let{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},13203(e,r,t){t.d(r,{Ay:()=>a,RM:()=>n});var i=t(74848),l=t(28453);let n=[];function s(e){let r={mermaid:"mermaid",...(0,l.R)(),...e.components};return(0,i.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    X{{X}}\n    Q1[[Q\u2081]]\n    Q2[[Q\u2082]]\n    C1((C\u2081))\n    C2((C\u2082))\n\n    P --\x3e X --\x3e Q1 & Q2\n    Q1 --\x3e C1\n    Q2 --\x3e C2\n\n    class P mermaid-producer\n    class X mermaid-exchange\n    class Q1 mermaid-queue\n    class Q2 mermaid-queue\n    class C1 mermaid-consumer\n    class C2 mermaid-consumer"})}function a(e={}){let{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},6462(e,r,t){t.d(r,{Ay:()=>a,RM:()=>n});var i=t(74848),l=t(28453);let n=[];function s(e){let r={mermaid:"mermaid",...(0,l.R)(),...e.components};return(0,i.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    X{{X}}\n    Q1[[Q\u2081]]\n    Q2[[Q\u2082]]\n    C1((C\u2081))\n    C2((C\u2082))\n\n    P --\x3e X\n    X -- a --\x3e Q1 & Q2\n    X -- b --\x3e Q2\n    X -- c --\x3e Q2\n    Q1 --\x3e C1\n    Q2 --\x3e C2\n\n    class P mermaid-producer\n    class X mermaid-exchange\n    class Q1 mermaid-queue\n    class Q2 mermaid-queue\n    class C1 mermaid-consumer\n    class C2 mermaid-consumer"})}function a(e={}){let{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},47817(e,r,t){t.d(r,{Ay:()=>a,RM:()=>n});var i=t(74848),l=t(28453);let n=[];function s(e){let r={mermaid:"mermaid",...(0,l.R)(),...e.components};return(0,i.jsx)(r.mermaid,{value:"flowchart LR\n    P((P))\n    X{{X}}\n    Q1[[Q\u2081]]\n    Q2[[Q\u2082]]\n    C1((C\u2081))\n    C2((C\u2082))\n\n    P --\x3e X\n    X -- #42;.a.#42; --\x3e Q1\n    X -- #42;.#42;.b --\x3e Q2\n    X -- c.# --\x3e Q2\n    Q1 --\x3e C1\n    Q2 --\x3e C2\n\n    class P mermaid-producer\n    class X mermaid-exchange\n    class Q1 mermaid-queue\n    class Q2 mermaid-queue\n    class C1 mermaid-consumer\n    class C2 mermaid-consumer"})}function a(e={}){let{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},89380(e,r,t){t.d(r,{Ay:()=>a,RM:()=>n});var i=t(74848),l=t(28453);let n=[];function s(e){let r={mermaid:"mermaid",...(0,l.R)(),...e.components};return(0,i.jsx)(r.mermaid,{value:"flowchart LR\n    C((Client))\n    S((Server))\n    Q1[[RPC]]\n    Q2[[Reply]]\n\n    C -- request --\x3e Q1 --\x3e S --\x3e Q2 -- reply --\x3e C\n\n    class C mermaid-producer\n    class Q1 mermaid-queue\n    class Q2 mermaid-queue\n    class S mermaid-consumer"})}function a(e={}){let{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},57250(e,r,t){t.d(r,{A:()=>a});var i=t(74848);t(96540);
1var l=t(34164),n=t(57663);function s({children:e,className:r,hidden:t}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,l.A)("tabItem_Ymn6",r),hidden:t,children:e})}function a({children:e,className:r,value:t}){let{selectedValue:l,lazy:o}=(0,n.uc)(),h=t===l;return!h&&o?null:(0,i.jsx)(s,{className:r,hidden:!h,children:e})}},50773(e,r,t){t.d(r,{A:()=>d});var i=t(74848);t(96540);var l=t(34164),n=t(88287),s=t(57663),a=t(28584),o=t(19863);function h({className:e}){let{selectedValue:r,selectValue:t,tabValues:n,block:o}=(0,s.uc)(),u=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{let i=e.currentTarget,l=n[u.indexOf(i)].value;l!==r&&(c(i),t(l))},x=e=>{let r=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{let t=u.indexOf(e.currentTarget)+1;r=u[t]??u[0];break}case"ArrowLeft":{let t=u.indexOf(e.currentTarget)-1;r=u[t]??u[u.length-1]}}r?.focus()};return(0,i.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.A)("tabs",{"tabs--block":o},e),children:n.map(({value:e,label:t,attributes:n})=>(0,i.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>{u.push(e)},onKeyDown:x,onClick:d,...n,className:(0,l.A)("tabs__item","tabItem_LNqP",n?.className,{"tabs__item--active":r===e}),children:t??e},e))})}function u({children:e}){return(0,i.jsx)("div",{className:"margin-top--md",children:e})}function c({className:e,children:r}){return(0,i.jsxs)("div",{className:(0,l.A)(n.G.tabs.container,"tabs-container","tabList__CuJ"),children:[(0,i.jsx)(h,{className:e}),(0,i.jsx)(u,{children:r})]})}function d(e){let r=(0,o.A)(),t=(0,s.OC)(e);return(0,i.jsx)(s.O_,{value:t,children:(0,i.jsx)(c,{className:e.className,children:(0,s.vT)(e.children)})},String(r))}},57663(e,r,t){t.d(r,{OC:()=>d,O_:()=>m,uc:()=>j,vT:()=>u});var i=t(74848),l=t(96540),n=t(56347),s=t(99989),a=t(96629),o=t(80618),h=t(41367);function u(e){return l.Children.toArray(e).filter(e=>"\n"!==e)}function c({value:e,tabValues:r}){return r.some(r=>r.value===e)}function d(e){let r,{defaultValue:t,queryString:i=!1,groupId:u}=e,d=function(e){let{values:r,children:t}=e;return(0,l.useMemo)(()=>{let e=r??l.Children.toArray(t).flatMap(e=>{if(!e)return[];if((0,l.isValidElement)(e)&&function(e){let{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return[e];let r="string"==typeof e.type?e.type:e.type.name;throw Error(`Docusaurus error: Bad <Tabs> child <${r}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.
2If you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:r,attributes:t,default:i}})=>({value:e,label:r,attributes:t,default:i})),i=(0,o.XI)(e,(e,r)=>e.value===r.value);if(i.length>0)throw Error(`Docusaurus error: Duplicate values "${i.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`);return e},[r,t])}(e),[x,j]=(0,l.useState)(()=>(function({defaultValue:e,tabValues:r}){if(0===r.length)throw Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!c({value:e,tabValues:r}))throw Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}let t=r.find(e=>e.default)??r[0];if(!t)throw Error("Unexpected error: 0 tabValues");return t.value})({defaultValue:t,tabValues:d})),[m,p]=function({queryString:e=!1,groupId:r}){let t=(0,n.W6)(),i=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:e,groupId:r});return[(0,a.aZ)(i),(0,l.useCallback)(e=>{if(!i)return;let r=new URLSearchParams(t.location.search);r.set(i,e),t.replace({...t.location,search:r.toString()})},[i,t])]}({queryString:i,groupId:u}),[f,b]=function({groupId:e}){let r=e?`docusaurus.tab.${e}`:null,[t,i]=(0,h.Dv)(r);return[t,(0,l.useCallback)(e=>{r&&i.set(e)},[r,i])]}({groupId:u}),v=c({value:r=m??f,tabValues:d})?r:null;return(0,s.A)(()=>{v&&j(v)},[v]),{selectedValue:x,selectValue:(0,l.useCallback)(e=>{if(!c({value:e,tabValues:d}))throw Error(`Can't select invalid tab value=${e}`);j(e),p(e),b(e)},[p,b,d]),tabValues:d,lazy:e.lazy??!1,block:e.block??!1}}let x=(0,l.createContext)(null);function j(){let e=l.useContext(x);if(!e)throw Error("useTabsContext() must be used within a Tabs component");return e}function m(e){return(0,i.jsx)(x.Provider,{value:e.value,children:e.children})}},28453(e,r,t){t.d(r,{R:()=>s,x:()=>a});var i=t(96540);let l={},n=i.createContext(l);function s(e){let r=i.useContext(n);return i.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),i.createElement(n.Provider,{value:r},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.