고급 메시지 큐 프로토콜

Advanced Message Queuing Protocol

AMQP(Advanced Message Queuing Protocol)는 메시지 지향 미들웨어를 위한 개방형 표준 애플리케이션 계층 프로토콜이다.AMQP의 정의 기능은 메시지 방향, 대기열, 라우팅(포인트 대 포인트 및 게시 및 구독 포함), 신뢰성 및 보안이다.[1]

AMQP는 SMTP, HTTP, FTP 등이 상호운용 가능한 시스템을 만든 것과 같은 방법으로 서로 다른 벤더의 구현이 상호운용 가능한 범위 내에서 메시징 제공자와 클라이언트의 행동을 의무화한다.이전 미들웨어 표준화는 API 수준(예: JMS)에서 이루어졌으며, 다중 구현 간의 상호운용성을 제공하기보다는 다른 미들웨어 구현과의 프로그래머 상호작용을 표준화하는데 초점을 맞추었다.[2]메시징 구현이 제공해야 하는 API와 일련의 동작을 정의하는 JMS와 달리 AMQP는 유선 수준 프로토콜이다.유선 수준 프로토콜은 바이트 스트림으로서 네트워크를 통해 전송되는 데이터의 포맷에 대한 설명이다.결과적으로, 이 데이터 형식에 부합하는 메시지를 만들고 해석할 수 있는 도구는 구현 언어에 관계 없이 다른 준수 도구와 상호 운용할 수 있다.

개요

AMQP는 다양한 메시징 애플리케이션과 통신 패턴을 효율적으로 지원하도록 설계된 바이너리 애플리케이션 계층 프로토콜이다.그것은 at-most-once(각 메시지가 오거나 결코 전달된다),at-least-once(각 전달될 메시지, 하지만 그렇게 여러번을 할 것이 확실하다)과 exactly-once(메시지가 항상 확실히 그렇게 한번만 하에 도착할 예정)[4] 같은 message-delivery 보장과 함께 흐름 controlled,[3]message-oriented 통신을 제공합니다.dautSASL 및/또는 TLS 기반 인증 및/또는 암호화.[5]그것은 전송 제어 프로토콜(TCP)과 같은 기초적인 신뢰할 수 있는 전송 계층 프로토콜을 가정한다.[6]

AMQP 규격은 (i) 형식 시스템, (ii) 한 프로세스에서 다른 프로세스로 메시지 전송을 위한 대칭적이고 비동기적인 프로토콜, (iii) 표준화된 확장 가능한 메시지 형식 및 (iv) 표준화되었지만 확장 가능한 일련의 '메시지 기능'으로 정의된다.

역사

AMQP는 2003년 존 오하라가 런던 JPMorgan Chase에서 발원했다.[1][7]AMQP는 협동조합의 개방적인 노력으로 구상되었다.초기 설계는 JPMorgan Chase가 2004년 중반부터 2006년 중반까지였으며, iMatix Corporation과 계약하여 C 브로커와 프로토콜 문서를 개발하였다.2005년 JPMorgan Chase는 Cisco 시스템s, IONA Technologies, iMatix, Red Hat 및 TWIST(Transaction Workflow Innovation Standards Team)를 포함하는 워킹 그룹을 구성하기 위해 다른 회사에 접근했다.같은 해에 JPMorgan Chase는 Red Hat과 제휴하여 처음에는 Java에서 그리고 곧 C++에서 Apache Qfid를 만들었다.독립적으로, 토끼MQ는 Erlang에서 Rabbit Technologies에 의해 개발되었고, 후에 마이크로소프트스톰이 그 뒤를 이었다.MQ 구현.

The working group grew to 23 companies including Bank of America, Barclays, Cisco Systems, Credit Suisse, Deutsche Börse, Goldman Sachs, HCL Technologies Ltd, Progress Software, IIT Software, INETCO Systems Limited, Informatica (including 29 West), JPMorgan Chase, Microsoft Corporation, my-Channels, Novell, Red Hat, Software AG, Solace Systems, STormMQ, Tervela Inc., TWIT Process Innovations Ltd, VMware(Rabbit Technologies 인수) 및 WSO2.

2011년 8월 AMQP 워킹그룹은 OASIS 멤버 부문으로의 개편을 발표했다.[8]

AMQP 1.0은 2011년 10월 30일 AMQP 워킹 그룹에 의해 뉴욕에서 열린 컨퍼런스에서 발표되었다.Microsoft, Red Hat, VMware, Apache, INETCO 및 IIT Software는 상호운용성 시연에서 프로토콜을 실행하는 소프트웨어를 시연했다.다음날인 2011년 11월 1일, OASIS 기술 위원회 구성이 발표되어[9], 이 기고된 AMQP 버전 1.0을 국제 공개 표준 프로세스를 통해 앞당겼다.OASIS의 초안은 2012년 2월에 발표되었는데,[10] 작업 그룹이 발행한 것과 비교했을 때, 명확성 향상을 위해 편집으로 제한되었다(기능 변경은 없다).2차 초안은 6월 20일 공개 검토를 위해 공개되었으며([11]기능 변경 없이), AMQP는 2012년 10월 31일 OASIS 표준으로 승인되었다.[12]

OASIS AMQP는 2014년 4월 ISO 및 IEC 국제 표준으로 출시 승인을 받았다.[13]AMQP 1.0은 국제표준기구(ISO)의 정보기술 공동기술위원회(JTC1)와 국제전기기술위원회(IEC)를 통해 공인되었다.승인된 OASIS AMQP 제출은 ISO/IEC 19464로 지정되었다.

이전 버전의 AMQP는 2006년 6월에 발행된 0-8, 2006년 12월에 발행된 0-9, 2008년[14] 2월에 발행된 0-10, 2008년 11월에 발행된 0-9-1이다.이러한 이전 릴리스는 1.0 규격과 상당히 다르다.[15][16]

AMQP는 금융 서비스 산업에서 시작되었지만, 광범위한 미들웨어 문제에 대한 일반적인 적용가능성을 가지고 있다.

AMQP 1.0 설명

유형 시스템

AMQP는 일반적으로 사용되는 다양한 유형의 상호운용 가능한 표현을 허용하는 자체 설명 인코딩 체계를 정의한다.또한 입력된 데이터에 추가적인 의미를 부여할 수 있도록 허용한다.[17] 예를 들어 특정 문자열 값에 주석을 달 수 있기 때문이다. 마찬가지로 '이름', '주소' 등에 대한 키 값 쌍을 포함하는 지도 값도 '고객' 유형의 표현으로 주석을 달 수 있다.

형식 시스템은 처리 실체가 표준 및 확장 메타 데이터를 표현하고 이해할 수 있도록 하는 메시지 형식을 정의하는 데 사용된다.또한 그러한 실체들, 즉 AMQP 프레임 본체들 간에 메시지가 교환되는 통신 원시성을 정의하는 데도 사용된다.

퍼포먼스 및 링크 프로토콜

AMQP에서 데이터의 기본 단위는 프레임이다.두 피어 간의 메시지 전송을 시작, 제어 및 해체하는 데 사용되는 9개의 AMQP 프레임 본체가 정의되어 있다.다음은 다음과 같다.

  • 개방(연결)
  • (회기)를 시작하다
  • 첨부(링크)
  • 전근시키다
  • 흐르다
  • 기질
  • 분리(링크)
  • (세션 종료)
  • 닫다(연결)

링크 프로토콜은 AMQP의 핵심에 있다.

링크를 시작하기 위해 부착 프레임 본체가 전송되고 링크를 해체하기 위해 분리된다.메시지를 수신하거나 발송하기 위해 링크를 설정할 수 있다.

메시지는 전송 프레임을 사용하여 설정된 링크를 통해 전송된다.링크에 있는 메시지는 한 방향으로만 흐른다.

이전은 신용에 기초한 흐름 제어 체계의 적용을 받으며 흐름 프레임을 사용하여 관리된다.이것은 프로세스가 너무 많은 메시지 볼륨에 압도되지 않도록 스스로를 보호하거나 구독 링크가 원하는 때에 메시지를 끌어낼 수 있도록 허용한다.[18]

전송된 각각의 메시지는 결국 해결되어야 한다.정산은 송신자와 수신자가 전송 상태에 합의하여 신뢰성 보증을 제공하도록 보장한다.이전(또는 이전 집합)에 대한 상태 및 정산 변경은 배치 프레임을 사용하여 동료 간에 전달된다.다양한 신뢰성 보장은 이러한 방식으로 시행될 수 있다. 즉, 한 번에, 최소 한 번, 그리고 정확히 한 번.[19]

양방향으로 여러 링크를 세션으로 그룹화할 수 있다.세션은 시작 프레임으로 시작하고 프레임으로 종료되는 두 피어 간의 양방향 순차 대화다.두 피어 사이의 연결은 각각 논리적으로 독립적으로 다중화된 다중 세션을 가질 수 있다.연결은 송신 피어의 기능이 표현되는 개방된 프레임으로 시작되며, 닫힌 프레임으로 종료된다.

메시지 형식

AMQP는 전송 응용 프로그램에 의해 만들어진 메시지의 일부인 베어 메시지로 정의한다.메시지가 하나 이상의 프로세스 간에 전송되기 때문에 이것은 불변으로 간주된다.

응용프로그램이 전송한 메시지가 불변하도록 보장하면 엔드투엔드 메시지 서명 및/또는 암호화가 허용되며 모든 무결성 검사(예: 해시 또는 다이제스트)가 유효함을 보장한다.이 메시지는 전송 중에 중개인에 의해 주석을 달 수 있지만, 그러한 주석들은 불변의 맨 메시지와는 구별된다.주석을 맨 메시지 앞이나 뒤에 추가할 수 있다.

헤더(header)는 메시지에 대해 요청하거나 표시할 수 있는 배달 관련 주석의 표준 집합이며, 수명, 내구성, 우선순위를 포함한다.[20]

베어 메시지 자체는 표준 속성(메시지 ID, 사용자 ID, 작성 시간, 회신 대상, 제목, 상관 ID, 그룹 ID 등), 응용 프로그램별 속성(즉, 확장된 속성)의 선택적 목록과 본문(body)으로 구성되는데, AMQP는 이를 응용 프로그램 데이터라고 한다.[21]

특성은 주석과 같이 AMQP 유형 시스템에 지정된다.응용 프로그램 데이터는 응용 프로그램이 선택한 모든 인코딩에서 어떤 형태든 될 수 있다.한 가지 옵션은 AMQP 유형 시스템을 사용하여 구조화된 자체 설명 데이터를 전송하는 것이다.

메시징 기능

링크 프로토콜은 두 노드 사이에 메시지를 전송하지만, 그러한 노드가 무엇인지 또는 어떻게 구현되는지에 대해서는 거의 고려하지 않는다.

주요 범주는 메시지 송신자와 수신자 사이의 랑데부 지점(: 대기열 또는 주제)으로 사용되는 노드들이다.AMQP 규격은 그러한 노드 배포 노드를 호출하고 몇 가지 일반적인 동작을 코드화한다.[22]

여기에는 다음이 포함된다.

  • 메시지 수신자가 예를 들어 메시지를 수신하거나 거부할 수 있는 전송에 대한 일부 표준 결과
  • 경쟁 소비자와 비 소비자를 각각 이동 및 복사하는 두 가지 기본 분배 패턴 중 하나를 표시하거나 요청하는 메커니즘
  • 임시 응답 대기열과 [25][26]같은 주문형 노드를 생성할 수 있는 기능
  • 필터를 통해 수신자에게 보내는 관심 메시지 세트를 세분화하는 기능

AMQP는 단순한 피어투피어 시스템에서 사용될 수 있지만, 메시징 기능에 대한 이 프레임워크를 정의하면 더 크고 풍부한 메시징 네트워크에서 메시징 매개자(브로커, 브리지 등)와의 상호운용성을 추가로 가능하게 한다.지정된 프레임워크는 기본 동작을 다루지만, 더 나아가 코드화 및 표준화될 수 있는 확장이 가능하도록 한다.

구현

AMQP 1.0 브로커 구현

1.0 이전 AMQP 브로커 구현

사양

AMQP 프로토콜 버전 1.0은 현재 사양 버전이다.인터넷 규모의 상호운용성에 필요한 핵심 기능에 초점을 맞춘다.핵심 기능성이 엄격하게 표준화된 첫 번째 것이기 때문에 이전 버전보다 덜 명시적인 라우팅이 포함되어 있다.AMQP 1.0 상호운용성은 이전 버전보다 더 많은 구현자와 더 광범위하게 테스트되었다.[33]

AMQP 웹사이트에는 버전 1.0의 OASIS 사양이 포함되어 있다.

1.0(위 기록 참조)의 출시 전에 발행되고 그것과 현저하게 다른 이전 버전의 AMQP에는 다음이 포함된다.

비교 사양

다음은 AMQP와 동일하거나 유사한 공간을 다루는 알려진 개방형 프로토콜 규격이다.

자바 메시지 서비스(JMS)는 종종 AMQP와 비교된다.그러나 JMS는 메시지 생산자와 소비자가 어떻게 구현되는지를 정의하는 API 규격(Java EE 규격의 일부)이다.JMS는 구현 간의 상호 운용성을 보장하지 않으며, 사용 중인 JMS 인증 메시징 시스템은 클라이언트와 서버 모두에 배치되어야 할 수도 있다.반면 AMQP는 유선 수준의 프로토콜 사양이다.이론적으로 AMQP는 클라이언트와 서버 측에 서로 다른 AMQP 호환 소프트웨어를 배치할 수 있기 때문에 상호운용성을 제공한다.HTTPXMPP와 마찬가지로 AMQP에도 표준 API가 없다는 점에 유의하십시오.

참고 항목

참조

  1. ^ a b O'Hara, J. (2007). "Toward a commodity enterprise middleware". ACM Queue. 5 (4): 48–55. doi:10.1145/1255421.1255424.
  2. ^ Vinoski, S. (2006). "Advanced Message Queuing Protocol" (PDF). IEEE Internet Computing. 10 (6): 87–89. doi:10.1109/MIC.2006.116. S2CID 14211884.
  3. ^ "OASIS AMQP version 1.0, sections 2.6.7-2.6.8". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  4. ^ "OASIS AMQP version 1.0, sections 2.6.12-2.6.13". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  5. ^ "OASIS AMQP version 1.0, section 5.1". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  6. ^ "OASIS AMQP version 1.0, section 2.1". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  7. ^ Hintjens, Pieter (7 February 2006). "Background to the AMQ Project, Authors". iMatix Corporation. Retrieved 18 February 2018.
  8. ^ "AMQP Working Group Transitions to OASIS Member Section". Archived from the original on 16 April 2012. Retrieved 28 January 2012.
  9. ^ OASIS에서 AMQP 기술 위원회를 구성하여 미들웨어, 모바일 및 클라우드 환경 내의 비즈니스 메시징 상호 운용성 향상
  10. ^ "30-day Public Review for OASIS AMQP Version 1.0". 21 February 2012. Retrieved 18 June 2012.
  11. ^ "15 day Public Review for OASIS AMQP Version 1.0". 20 June 2012. Retrieved 20 June 2012.
  12. ^ "AMQP 1.0 Becomes OASIS Standard". 31 October 2012. Retrieved 1 November 2012.
  13. ^ "Information technology -- Advanced Message Queuing Protocol (AMQP) v1.0 specification". ISO/IEC 19464. ISO. Retrieved 1 May 2014.
  14. ^ "AMQP PMC Meeting Minutes 13th February, 2008". AMQP PMC Minutes. AMQP Working Group. Archived from the original on 30 November 2012. Retrieved 15 June 2012.
  15. ^ "RabbitMQ - AMQP 0-8 to 0-9-1". www.rabbitmq.com. Retrieved 12 January 2018.
  16. ^ rabbitmq-amqp1.0: AMQP 1.0 support for RabbitMQ, RabbitMQ, 17 December 2017, retrieved 12 January 2018
  17. ^ "OASIS AMQP version 1.0, section 1.1". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  18. ^ "OASIS AMQP version 1.0, section 2.6.7-2.6.9". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  19. ^ "OASIS AMQP version 1.0, section 2.6.12-2.6.14". AMQP WorkingGroup. Retrieved 18 June 2012.
  20. ^ "OASIS AMQP version 1.0, section 3.2.1". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  21. ^ "OASIS AMQP version 1.0, section 3.2". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  22. ^ "OASIS AMQP version 1.0, section 3.3". OASIS AMQP Technical Committee. Retrieved 15 June 2012.
  23. ^ "OASIS AMQP version 1.0, section 3.4". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  24. ^ "OASIS AMQP version 1.0, section 3.5.2". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  25. ^ "OASIS AMQP version 1.0, section 3.5.3". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  26. ^ "OASIS AMQP version 1.0, section 3.5.4". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  27. ^ "OASIS AMQP version 1.0, section 3.5.1". OASIS AMQP Technical Committee. Retrieved 18 June 2012.
  28. ^ a b axisc. "AMQP 1.0 in Azure Service Bus and Event Hubs protocol guide". docs.microsoft.com. Retrieved 21 May 2019.
  29. ^ ShubhaVijayasarathy. "What is Azure Event Hubs? - a Big Data ingestion service". docs.microsoft.com. Retrieved 21 May 2019.
  30. ^ axisc. "Overview of AMQP 1.0 in Azure Service Bus". docs.microsoft.com. Retrieved 21 May 2019.
  31. ^ "Solace PubSub+". solace.com.
  32. ^ Qfidd 0.22 - Apache Qfid™
  33. ^ "Status of Pre-1.0 Versions of AMQP". AMQP site. Retrieved 28 May 2014.
  34. ^ "AMQP 0-9-1 Model Explained". VMWare, Inc. Retrieved 1 November 2012.

외부 링크