2012-03-09 4 views
1

필자는 서비스 지향 응용 프로그램을 작성하는 초보자이므로 일부 전문가에게는 사소한 질문 일 수 있습니다.Ruby 서비스 지향 아키텍처 - 동기화를 보장하는 방법?

현재 설정은 다음과 같습니다.

1 - 기본 레일 앱입니다. 또한 경로와 일부 응용 프로그램 논리를 포함합니다.
2 - 몇 가지 서비스. 나는베이스 레일 앱에서 이것을 추출했다. 그들은 대부분 DB가 광범위하거나 no-sql 솔루션을 사용하는 리소스입니다.

그럼, 내가하고 결국 한 것은 내 레일 응용 프로그램에서이

같은 것입니다, 나는 장소에 모든 기본적인 CRUD 작업에 응답하는 장소 컨트롤러를 가지고있다. 내부적으로는 장소 서비스에 대한 HTTP 호출을 수행합니다.

def show 
    req = Typhoeus::Request.new('http://127.0.0.1:7439/places/#{params[:id]}.json') 
    @places = req.response.body 
end 

문제는 제가 두 개 이상의 서비스 요청을하면, 뷰를 렌더링하기 전에 모두에 대한 응답이 있는지 확인하는 것입니다. 또한 서비스 호출 1 건으로도 Rails 렌더링 프로세스는 어떻게 작동합니까? 예를 들어, 서비스가 응답하는 데 오랜 시간이 걸리는 경우 페이지가 렌더링되거나 응답을 위해 무한정 기다립니다.

+1

ActiveResource를 사용하는 것이 좋습니다. 유지 관리가 훨씬 쉬울 것입니다. – apneadiving

+2

docs 페이지에는 병렬 요청을 수행하고 모두 완료 될 때까지 대기하는 방법이 명시되어 있습니다. https://github.com/dbalatero/typhoeus –

+0

아마이 책 [Ruby와 Rails로 서비스 지향 디자인] (http://my.safaribooksonline.com/book/web-development/ruby/9780321700124)이 필요합니다. – Anatoly

답변

0

Typhoeus에 관해서 내가 한 번도 사용해 본 적이없는 질문에 대해서는 답변을 드릴 수 없지만 좀 더 일반적으로 SOA의 문제에 대해 답변 해 드리겠습니다. 잘하면 도움이 될 것입니다.

일반적인 스레드는 UI가 많은 서비스로 구성되어야하며 일부 서비스가 다운되거나 응답하지 않을 가능성에 내성이 있어야한다는 것입니다.

1) 드롭 다운 및 브라우저에서 구성을 수행합니다

당신은 몇 가지 옵션이 있습니다. Backbone과 같은 것을 사용하고 각 서비스에 Ajax 요청을하십시오. 이러한 요청 중 많은 부분을 비동기 적으로 만들 수 있으며 페이지가 반환 될 때 페이지의 각 부분을 렌더링 할 수 있습니다. 반환하지 않으면 해당 부분을 렌더링하지 않거나 Backbone에서 해당 영역에 일종의 자리 표시자를 렌더링하게 할 수 있습니다.

2) 예를 들어 컨트롤러에서 모델 개체를 빌드하려면 시간 초과를 처리하고 다시 응답해야하는 모든 서비스에 대해 자리 표시 자 모델을 사용해야합니다. 이것에 대한 좋은 점은 서비스에 따라 데이터를 보유하는 데 얼마나 중요한지와 시간 초과로 간주하고 이동하기 전에 기다려야 할 시간을 결정할 수 있다는 것입니다.

예를 들어 Amazon 제품 페이지를 예로 들어보십시오. 서비스에서 제품에 대한 세부 정보를 얻는 것은 매우 중요합니다. 이해하지 못하면 브라우저에 오류를 던질 가치가 있습니다. 그러나 "구입 한이 제품을 구입 한 고객"서비스가 응답하지 않는 경우 대기를 멈추고 페이지를 렌더링하지 않고도 괜찮습니다.

다시 - Typhoeus를 잘 모르기 때문에 이것을 어떻게 관리해야할지 모르겠지만 잘하면이 도움이됩니다. 행운을 빕니다!

관련 문제