2013-08-12 8 views
3

나는 James Lewis의 "Microservices: Java, The Unix Way" 프리젠 테이션을 정말 즐겼습니다. 이 프레젠테이션에서http를 사용하여 경쟁 소비자를 구현하는 방법

, Atom 피드 오프 이벤트를 읽고 여러 소비자가 과정에서 읽기 및 사용자 단체로 전환 할 수있는 엔드 포인트를 노출하는 큐 처리 엔진을 작성하여 사용자 등록 서비스를 구현하는 방법에 대한 제임스의 이야기.

"대기열 처리 엔진 조건부 GET을 사용하여 경쟁 소비자 패턴을 구현, PUT 및 ETag를 : 특정 slide (비디오에서 18시 40분 주위)에

노트는이 사용 competing consumer EIP 구현 말 이벤트 대기열에 의해 노출 된 원자 집계에 대해 "

이러한 유형의 대기열 (그리고 이질적인 소비자가 있다고 말하는 방식)은 게시 - 구독 채널임을 암시합니다.

난 정말이 구현 될 수 있는지 이해하지 마십시오 EIP 책은 소비자를 경쟁하는 경우에만 작동 말한다 :

[...]와 지점 간 채널; 여러 소비자 게시 - 구독 채널 단지

내가 큐 프로세서는 경쟁 소비자가 새 항목에 대한 GET 요청을 부르는 REST 리소스를 노출 가정하지만, 각 메시지의 많은 사본을 작성하여 PUT 요청을 할 경우와 etags 그것으로 들어온다?

답변

2

동료가 Martin Fowler와 James Lewis에게 이야기하고 요약 된 절반을 요약하면 대기열의 소비자가 여러 명 없다는 것을 의미합니다.

단지 하나의 소비 서비스가 있으며 작동이 중단 될 경우 경고를받을 수 있도록 모니터링해야합니다.

+0

여러 수석 건축가로부터 조언을 받았습니다. 단일 사용자는 수평 확장이 실제로 필요한 경우 이벤트를 경쟁 대기열로 간단하게 파이프 할 수 있습니다. – Seth

2

이러한 맥락에서 PUT 방식에 엔터티 태그의 사용은 RFC 5023, The Atom Publishing Protocol, Section 9.5에 설명되어 있습니다 :

편집 후, 항목 PUT과 IF-Match 헤더에있는 ETag 엔티티 값을 보낼 수있는 클라이언트 전송 된 엔티티 값이 여전히 서버와 일치한다는 조건에서 엔트리를 받아들이도록 서버에 알립니다.

PUT /edit/first-post.atom HTTP/1.1 
    Host: example.org 
    Authorization: Basic ZGFmZnk6c2VjZXJldA== 
    Content-Type: application/atom+xml;type=entry 
    Content-Length: nnn 
    If-Match: "e180ee84f0671b1" 

    <?xml version="1.0" ?> 
    <entry xmlns="http://www.w3.org/2005/Atom"> 
    <title>Atom-Powered Robots Run Amok</title> 
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> 
    <updated>2007-02-24T16:34:06Z</updated> 
    <author><name>Captain Lansing</name></author> 
    <content>Update: it's a hoax!</content> 
    </entry> 

서버는 그러나 이후 고객의보다 더 최근의 사본을 받았고, 그것이 ("전제 조건 실패") (412)의 상태 코드로 응답

. 는 PUT 요청과 함께 If-Match 헤더의 엔터티 태그를 전송하므로 다른 사람이 아직 그렇게 한 경우 즉

HTTP/1.1 412 Precondition Failed 
    Date: Sat, 24 Feb 2007 16:34:11 GMT 

, 클라이언트는 리소스를 편집 할 수 없습니다. 클라이언트는 서버에 "이미 다른 사람이이 리소스를 편집하지 않았다면 내 편집 만 수락합니다."라고 말합니다.

+0

그래서 소비자가 PUT 요청을 발행하여 항목을 "소유권 주장"을 표시하도록 수정할 수 있으며 다른 소비자가 이미 "청구"한 경우 소비자를 허용하는 요청을 중단하는 다른 etag을 생성합니다 중얼 거릴 다른 사건을 찾는다. – plasma147

+0

AtomPub의 단점 중 하나는 여러 소비자 * 역할을하는 것입니다. 여러 소비자 역할에 대해이 접근 방식을 사용할 수있는 것처럼 보이지만 소비자가 소비를 관리해야하는 것처럼 보입니다. – Seth