1"use strict";(self.webpackChunkrabbitmq_website=self.webpackChunkrabbitmq_website||[]).push([["17309"],{89340(e,t,s){s.r(t),s.d(t,{metadata:()=>r,default:()=>d,frontMatter:()=>o,contentTitle:()=>a,toc:()=>c,assets:()=>l});var r=JSON.parse('{"id":"protocols","title":"Which protocols does RabbitMQ support?","description":"\x3c!--","source":"@site/versioned_docs/version-4.2/protocols.md","sourceDirName":".","slug":"/protocols","permalink":"/docs/4.2/protocols","draft":false,"unlisted":false,"editUrl":"https://github.com/rabbitmq/rabbitmq-website/tree/main/versioned_docs/version-4.2/protocols.md","tags":[],"version":"4.2","frontMatter":{"title":"Which protocols does RabbitMQ support?","displayed_sidebar":"docsSidebar"},"sidebar":"docsSidebar","previous":{"title":"Installing 3rd-party Plugins","permalink":"/docs/4.2/installing-plugins"},"next":{"title":"AMQP 1.0","permalink":"/docs/4.2/amqp"}}'),i=s(74848),n=s(28453);let o={title:"Which protocols does RabbitMQ support?",displayed_sidebar:"docsSidebar"},a="Which protocols does RabbitMQ support?",l={},c=[{value:"AMQP 0-9-1",id:"amqp-091",level:2},{value:"AMQP 1.0",id:"amqp-10",level:2},{value:"RabbitMQ Streams",id:"rabbitmq-streams",level:2},{value:"MQTT",id:"mqtt",level:2},{value:"STOMP",id:"stomp",level:2},{value:"WebSocket",id:"websocket",level:2},{value:"HTTP",id:"http",level:2}];function h(e){let t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"which-protocols-does-rabbitmq-support",children:"Which protocols does RabbitMQ support?"})}),"\n",(0,i.jsx)(t.p,{children:"RabbitMQ supports several messaging protocols, directly and through the\nuse of plugins. This page describes the supported protocols and\nhelps differentiate between them."}),"\n",(0,i.jsx)(t.h2,{id:"amqp-091",children:"AMQP 0-9-1"}),"\n",(0,i.jsxs)(t.p,{children:["RabbitMQ was originally developed to ",(0,i.jsx)(t.a,{href:"/amqp-0-9-1-protocol",children:"support AMQP 0-9-1"}),'.\nAs such this protocol has been the first "core" protocol supported by\nthe broker. We have ',(0,i.jsx)(t.a,{href:"./extensions",children:"extended"})," AMQP 0-9-1 in various ways."]}),"\n",(0,i.jsxs)(t.p,{children:["AMQP 0-9-1 is a binary protocol, and defines quite strong\nmessaging semantics. For clients it's a reasonably easy\nprotocol to implement, and as such there\nare ",(0,i.jsx)(t.a,{href:"/client-libraries/devtools",children:"a large number of client libraries"})," available for\nmany different programming languages and environments."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/tutorials",children:"RabbitMQ tutorials"})," are available for AMQP 0-9-1."]}),"\n",(0,i.jsx)(t.h2,{id:"amqp-10",children:"AMQP 1.0"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"./amqp",children:"AMQP 1.0"})," is a more modern protocol.\nIt is an ",(0,i.jsx)(t.a,{href:"https://www.iso.org/standard/64955.html",children:"ISO/IEC 19464"})," and ",(0,i.jsx)(t.a,{href:"https://www.amqp.org/node/102",children:"OASIS"})," standard."]}),"\n",(0,i.jsx)(t.p,{children:"Despite the name, AMQP 1.0 is a very different protocol from AMQP 0-9-1 / 0-9 / 0-8, sharing nothing at the wire level.\nAMQP 1.0 imposes fewer semantic requirements and is therefore supported by more message brokers.\nThe protocol is more complex than AMQP 0-9-1, and there are fewer client implementations."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/blog/2024/08/05/native-amqp",children:'AMQP 1.0 has become a "core" protocol in RabbitMQ 4.0'}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"rabbitmq-streams",children:"RabbitMQ Streams"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/rabbitmq/rabbitmq-server/blob/v3.13.x/deps/rabbitmq_stream/docs/PROTOCOL.adoc",children:"RabbitMQ Streams protocol"})," allows communicating with ",(0,i.jsx)(t.a,{href:"./streams",children:"streams"})," at very high throughput.\nRabbitMQ supports the streams protocol natively via a ",(0,i.jsx)(t.a,{href:"./stream",children:"plugin"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/tutorials",children:"RabbitMQ tutorials"})," are available for the RabbitMQ Streams protocol."]}),"\n",(0,i.jsx)(t.h2,{id:"mqtt",children:"MQTT"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"http://mqtt.org/",children:"MQTT"})," is a binary protocol\nemphasising lightweight publish / subscribe messaging,\ntargeted towards clients in constrained devices. It has\nwell defined messaging semantics for publish / subscribe,\nbut not for other messaging idioms."]}),"\n",(0,i.jsxs)(t.p,{children:["RabbitMQ supports MQTT versions 3.1, 3.1.1, and 5.0 ",(0,i.jsx)(t.a,{href:"/blog/2023/03/21/native-mqtt",children:"natively"})," via a ",(0,i.jsx)(t.a,{href:"./mqtt",children:"plugin"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"stomp",children:"STOMP"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"http://stomp.github.io/",children:"STOMP"})," is a text-based\nmessaging protocol emphasising (protocol) simplicity. It\ndefines little in the way of messaging semantics, but is\neasy to implement and very easy to implement partially (it's\nthe only protocol that can be used by hand over telnet)."]}),"\n",(0,i.jsxs)(t.p,{children:["RabbitMQ supports STOMP (all current versions) via\na ",(0,i.jsx)(t.a,{href:"./stomp",children:"plugin"})," by proxying internally over AMQP 0-9-1."]}),"\n",(0,i.jsx)(t.h2,{id:"websocket",children:"WebSocket"}),"\n",(0,i.jsxs)(t.p,{children:["Browser applications can use any of the following three application layer protocols to communicate with RabbitMQ over the ",(0,i.jsx)(t.a,{href:"https://datatracker.ietf.org/doc/html/rfc6455",children:"WebSocket protocol"}),":"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/blog/2025/04/16/amqp-websocket",children:"AMQP 1.0 over WebSocket"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"./web-mqtt",children:"MQTT over WebSocket"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"./web-stomp",children:"STOMP over WebSocket"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"http",children:"HTTP"}),"\n",(0,i.jsxs)(t.p,{children:["While HTTP is not really a messaging protocol, the ",(0,i.jsx)(t.a,{href:"./management",children:"management plugin"})," supports a simple HTTP API to send and receive messages.\nThis is primarily intended for diagnostic purposes but can be used for low volume messaging without ",(0,i.jsx)(t.a,{href:"./reliability",children:"reliable delivery"}),"."]})]})}function d(e={}){let{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453(e,t,s){s.d(t,{R:()=>o,x:()=>a});var r=s(96540);let i={},n=r.createContext(i);function o(e){let t=r.useContext(n);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(n.Provider,{value:t},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.