2017-03-20 8 views
1
내가 NATS을 만드는 오전

랭 큐 가입자 클라이언트 이동GO LANG NATS 난 다음 "foo는"제목이 수신 시간과 시간에 대한 메시지를 게시 할 때마다 그래서, 다음과 같이

nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) { 
     log.Printf("Message :%s", string(msg.Data)) 
}) 

구독 여러 큐와 큐 아니.

예를 들어 내가 "foo"라는 제목으로 10 개의 메시지를 보냈다면 2 또는 3 개의 최대 값을 받게됩니다. 다음과 같이

내 요구 사항은

  • 대기열 구독이 있어야한다.
  • 모든 입력 이벤트를 처리해야합니다.
  • 동시 모드에서 대기열 구독을 구현하는 방법.

도움을 주시면 감사하겠습니다.

답변

4

같은 이름의 여러 큐 구독자 (예 : my_queue)를 시작하면 "foo"에 게시 된 메시지는 해당 큐 구독자 중 하나만 이동합니다.

대기열 구독자가 메시지를 누락하는지 여부를 알리는 메시지가 확실하지 않습니다. NATS에는 끈기가 없습니다 (NATS 스트리밍에 있음). 따라서 앞에 메시지를 게시하면 해당 구독자가 만들어지고 해당 제목에 다른 구독자가없는 경우 메시지가 손실됩니다.

하나의 연결에서 큐 구독자를 실험하고 시작한 다음 동일한 응용 프로그램에서 다른 연결에서 메시지를 보내는 경우 서버에서 메시지 수신을 시작하기 전에 큐 구독을 등록하지 않았을 가능성이 있습니다 (다시 당신은 2 개의 연결을 사용하고있었습니다). 이 경우 가입을 만들고 전송을 시작하기 전에 연결을 플러시해야합니다 : nc.Flush().

마지막으로 동시 모드에서 대기열 가입자를 사용하는 것은 특별한 것이 아닙니다. 동일한 그룹에 속한 가입자의 동일한 제목에 대한 메시지로드 균형 조정입니다. 동일한 응용 프로그램에서 여러 대기열 구독자를 만드는 경우 조심해야 할 것은 메시지 처리기를 공유하지 않거나 그렇게 할 경우 메시지가 빠르게 도착하면 메시지 처리기가 동시에 호출되므로 잠금을 사용해야합니다 충분히.