2014-03-05 1 views
7

RabbitMQ에서 교환을 생성 한 다음 라우팅 키를 사용하여 여러 대기열에 바인딩 할 수 있습니다. 이 같은 메시징 아키텍처를 할 수 있습니다 :필터링을 사용하여 Amazon SNS에서 SQS로 메시지 라우팅

  message_x 
     / |  \ 
foo-msg_q bar-msg_q msg-logger_q 

클라이언트는 message_x 교환에 메시지를 게시하는 경로 foo-msg_q 큐에 키 "foo는"라우팅 만 메시지 라우팅 키 "바"와 메시지 bar-msg_q 대기열로, 모두 메시지를 msg-logger_q 대기열로 보냅니다.

AWS에서이 작업을 수행하는 방법을 파악하는 데 문제가 있습니다. 내 첫번째 생각은 주제에 따라 메시지를 허용하도록 개별 큐에 대한 사용 권한을 설정했지만, 허가 조건에 사용할 수있는 유일한 필드는 다음과 같습니다

  • AWS : currentTime을
  • AWS : EpochTime
  • AWS : MultiFactorAuthAge
  • AWS : principaltype
  • AWS : SecureTransport
  • AWS : SourceArn
  • AWS :의 SourceIP
  • AWS : 해당 UserAgent
  • AWS : 사용자 ID
  • AWS : 그들은 내가 message_x 주제를 게시하는 메시지에 의해 영향을받을 수있는 것처럼 이들의

없음 사용자 이름이 보인다.

Amazon Simple Notification Service를 사용하여 여러 개의 단순 대기열 서비스 대기열에 팬 아웃하고 각 대기열에 주제로 게시 된 메시지의 하위 집합을 수신 할 때 이와 같은 작업을 수행 할 수 있습니까?

+0

당신은 잘못된가 플랫폼을 사용합니다. Azure Topic을 사용하면 몇 초 안에 그렇게 할 수 있습니다. –

+2

@OlivierAlbertini 그다지 도움이되지 않습니다. 위의 내용을 알고 있다면 RabbitMQ에서 할 수있는 일이라고 언급 했으므로이 기능이있는 다른 플랫폼이 있다는 것을 알고 있습니다. SNS/SQS에 대해 구체적으로 질문했습니다. –

+1

문제를 해결하는 우아한 방법을 찾았습니까? – vercin

답변

6

아니요. 불가능합니다. 그들이 추가 할 수있는 훌륭한 기능이 될 것입니다.

내가 알고있는 유일한 대안은 각 라우팅 규칙에 대한 항목을 만든 다음 올바른 항목으로 게시하는 것입니다. 그것은 꽤 아니지만 그것은 작업을 수행합니다. 규칙이 많으면 허용되는 3000 가지 이상의 주제가 필요할 수 있습니다. 여기 http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_ses_quota 지침에 따라 웹 사이트에서 AWS의 주제 제한 증가를 요청할 수 있습니다.

+1

내 해결책은'(defn send-message [routing-key msg])'이다. 이것은 주제에 메시지를 먼저 게시하여 구독 된 모든 큐가이를 수신 한 다음'routing-key '라는 큐에 보낸다. 따라서 글로벌 주제에 등록 된 대기열에는 시뮬레이션 된 라우팅 키 "*"가 있습니다. –

+1

@JoshGlover 해결책을 얻지 못했습니다. 한번 더 설명해 주시겠습니까? – vercin

+0

SNS가 최근 Puji의 답변으로이 기능을 https://stackoverflow.com/a/47479409/179138 아래에 출시했습니다. –

4

SNS에서 메시지 속성 필터링을 사용하여 가능합니다. 다른 SQS 대기열을 SNS 주제에 가입시킨 후 SNS API SetSubscriptionAttributes를 사용하여 필터링 할 속성을 지정할 수 있습니다. 이렇게하면 다른 속성을 가진 메시지를 올바른 SQS 대기열로 라우팅 할 수 있습니다.

이것은 또한 SQS 대기열에 국한되지 않고 SNS 주제에있는 모든 구독 소스입니다. 예를 들어 하나의 SNS 주제는 람다에게 한 세트의 메시지를 게시 할 수 있고 다른 세트는 SQS를 게시 할 수 있습니다.

SDK 참조 : http://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html

자세한 내용은 예제와 함께 여기에 주어진 : https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/

관련 문제