HareGo : RabbitMQ가 Go를 만날 때

(Arsham Shirvani) (2020 년 12 월 18 일)

서문

Blokur에서는 RabbitMQ를 비동기식으로 사용합니다. 마이크로 서비스 간의 통신 및 작업 관리. AMQP 라이브러리는 Go 애플리케이션의 사실상 표준이지만 매우 낮은 수준이므로 유연하고 테스트 가능한 코드를 작성하기가 어렵습니다.

Go의 세계에는 RabbitMQ와의 통신을 용이하게하는 몇 가지 고수준 라이브러리가 있습니다. 불행히도 그들은 우리의 모든 사용 사례를 만족시키지 못했거나 그들이 제공하는 것에 대해 매우 구체적이어서 우리가 함께 일하기가 매우 어려웠습니다. 그래서 우리는 자체 라이브러리를 만들기로 결정했습니다.

우리는 일상 업무에서 가장 중요한 부분 인 문제 해결을 위해 빠르게 작업을 시작할 수있는 무언가가 필요했습니다. 그 주변의 모든 것은 개발 비용이며 우리 모델에 맞지 않습니다.

HareGo 입력

우리는 우리만의 라이브러리 는 다음과 같은 특성을 갖습니다.

  1. AMQP 라이브러리의 거의 모든 측면을 지원해야합니다.
  2. 잘 테스트되고 쉽게 테스트 할 수 있어야합니다.
  3. 사용하기 쉽고 확장 가능해야합니다.
  4. 그냥 작동하는 정상적인 기본값이 있어야합니다.
  5. 동시에 안전해야합니다.
  6. 이 기능이 있으면 좋습니다. 메시지를 다시 대기열에 추가하고 (Nack뿐만 아니라) 메시지를 다시 대기열에 추가하기 전에 메시지를 조작 할 수 있습니다.

이 라이브러리를 오픈 소스로 발표하게되어 기쁘게 생각합니다. 이 기사를 작성하는 시점에 Go 버전 1.14 이상을 지원합니다.

API

HareGo의 인터페이스는 매우 간단합니다. 편리한 harego를 사용하여 harego.Client 개체를 만들어야합니다. NewClient () 함수. NewClient () 함수의 유일한 요구 사항은 RabbitMQ 서버의 주소입니다. harego.ConfigFunc 구성 기능은 라이브러리에서 제공합니다.

기본적으로 harego.Client 는 한 번에 하나의 게시 또는 하나의 소비 요청을 처리하는 하나의 작업자를 만듭니다. 클라이언트는 임의의 소비자 이름을 얻습니다. 기본 동작은 autoDelete autoAck 속성은 false입니다. 그러나 원하는 경우 다르게 설정할 수 있습니다.

harego.Workers (3) 구성 기능으로 3 명의 동시 작업자가 있습니다. 이는 메시지 게시 및 소비에 적용됩니다. 라이브러리는 사용 가능한 다음 메시지를 사용 가능한 다음 작업자 슬롯으로 전달하도록 보장합니다.

harego.QueueName () 구성을 통해 클라이언트가 상호 작용해야하는 대기열을 알립니다. 기본 대기열 이름은 “harego”입니다.

클라이언트는 다음 사양의 인터페이스입니다.

메시지 게시

메시지를 게시하려면 * amqp.Publishing 개체를 Publish 메서드에 추가합니다. 다음 사용 가능한 작업자가 메시지를 처리합니다.

메시지 사용

사용 메서드는 브로커로부터 새 메시지를받을 때마다 핸들러를 사용하는 차단 호출입니다. 컨텍스트가 취소되거나 클라이언트가 닫히면 사용이 중지됩니다.

처리기는 AckType 값 및 지연. 지연은 브로커에 응답하기 전에 휴면해야하는 기간을 지정하고 AckType 값은 메시지에 발생해야하는 작업을 지정합니다.

AckType 값

여러 워커의 경우 하나의 메시지에만 응답하기 위해 ack의 “multiple”값을 false로 설정합니다. 작업자 시스템이 작동하도록하려면 프리 페치 값을 최소한 작업자 수로 설정해야합니다.

이 유형에는 네 가지 값이 있습니다.

  1. AckTypeAck : msg.Ack로 응답합니다.
  2. AckTypeNack : msg.Nack으로 응답합니다.
  3. AckTypeReject : msg.Reject로 응답합니다.
  4. AckTypeRequeue : 메시지를 대기열로 다시 보내고 msg.Ack로 응답합니다. 자세한 내용은 Re-queue Messages 섹션을 참조하십시오.

Re-queue Messages

AMQP 라이브러리를 사용하여 Nack 메시지는 다음 사용 가능한 소비자에게 전달됩니다. 때때로 이것은 예상 한 것과 다르며 큐의 끝으로 돌아가서 다시 배달하려면 메시지가 필요합니다. HareGo를 사용하면 가능할뿐만 아니라 다시 대기열에 추가하기 전에 메시지를 조작 할 수도 있습니다. 다음은 최대 5 번 대기열에 다시 추가하는 예입니다.

팁과 요령

다중 연결

이 라이브러리를 사용할 때 처리 할 여러 harego.Client 개체를 만듭니다. 논리의 다른 측면. 하나의 대기열에서 읽고 두 개의 대기열에 쓰고 있다고 가정 해 보겠습니다. 세 개의 개체를 만들고 첫 번째 항목의 소비자 내부에서 두 게시자를 호출합니다.

테스트 가능한 코드

harego.Client , 새 클라이언트 및 오류를 반환하는 함수 유형을 만들 수 있습니다. 모의 생성 라이브러리를 사용하여 harego.Client 인터페이스에서 모의를 생성하고 테스트에 사용할 수 있습니다.

p>

다음 스 니펫에서는 mockery 라이브러리를 사용하여 모의를 생성하고 testify 모의 주장을위한 라이브러리. 물론 가장 편한 라이브러리를 선택할 수 있습니다.

최종 단어

자세한 내용은 도서관의 저장소 를 방문하세요. 기능 요청이 필요하거나 라이브러리에 문제가있는 경우 github 포털에서 문제 를 생성하세요.

가입에 관심이 있습니다. 팀? 이 링크 로 이동하여 신청하세요.