2013-04-18 2 views
1

큐에서 메시지를 가져오고 큐에 삽입 할 수 있기를 원합니다. 이를 위해 JMS 기능을 활용할 수 있습니까? 아니면 이에 대한 사용자 지정 데이터 구조를 만들어야합니까?JMS 대기열을 임시 저장소로 어떻게 처리합니까?

임시 저장을위한 다른 특정 디자인 패턴이 있으면 알려주십시오.

업데이트 : 자세한 내용을 묻는 사람이 많기 때문에 여기에 있습니다. 필자의 요구 사항은 여러 클라이언트가 데이터를 보낼 수있는 큐에 메시지를 저장하고 필요에 따라 데이터를 다시 가져 오는 것입니다. 이 큐는 여러 클라이언트에서 사용할 수 있어야합니다. 하나의 메시지는 한 번만 처리되어야하며 클라이언트가 데이터를 처리 할 수없는 경우 메시지는 다시 대기열로 리턴되어야합니다.

+0

JMS API로 작업을 수행하면 충분합니다. 그러나 대기열은 임시 저장소로 사용되는 것이 아니라 메시지를 비동기 적으로 전달할 것으로 예상됩니다. – IndoKnight

+0

@Indoknight 귀하의 회신에 감사드립니다,하지만 내 요구 사항은 임시 저장 장치입니다. 같은 디자인 패턴이나 구성 요소가 있습니까? – gurvinder372

+0

저장 용량의 범위에 따라 다릅니다. Java에서는 응용 프로그램 범위의 정적 변수와 개체 수준 범위의 인스턴스 변수를 사용할 수 있습니다. – IndoKnight

답변

0

하나의 질문에 여러 가지 질문을하는 것처럼 보입니다. 대답이 필요한 개별적인 점을 조금 명확하게 설명하면 도움이 될 것입니다.

예, JMS를 '임시'저장소로 사용할 수는 있지만 그 의미와 필요한 항목에 따라 다릅니다. (예 : ActiveMQ를 같은) 대부분의 JMS 공급자는 큐에서 다음 작업을 수행 할 수 있습니다 :

  • 내구성에 큐를 설정 ((디스크 즉, 저장소와 큐는 모든 메시지가 다시 시작됩니다 경우) 또는 비 내구성 즉 디스크에 저장하지 말고 큐가 다시 시작되면 메시지가 표시되지 않습니다.
  • 메시지에 만료 시간을 설정할 수 있습니다. 따라서 메시지가 만료되지 않으면 메시지가 삭제됩니다.

이는 '임시 저장 장치'라고하는 것에 따라 다릅니다. JMS 대기열은 메시징 시스템 인 데이터베이스가 아닙니다.

데이터 구조와 관련하여 일반 Java 객체를 모두 ObjectMessage으로 직렬화하고 TextMessage을 사용하는 문자 메시지를 직렬화 할 수 있습니다. 따라서 XML, JSON, CSV 또는 원하는 것을 통과 할 수 있습니다. 메시지와 관련된 라우팅 또는 기타 메타 정보에 사용할 수있는 특수 헤더를 포함 할 수도 있습니다. 다시 '사용자 지정 데이터 구조'가 의미하는 바에 달려 있습니다. 또한 원시 BytesMessage 또는 MapMessage (키 - 값 쌍)을 보낼 수도 있고 StreamMessage 다른 데이터 형식을 차례대로 보낼 수도 있습니다.

문자 그대로의 의미로 임시 저장소가 필요하다면 Derby 나 HSQLDB와 같은 내장 데이터베이스를 살펴 봐야 할 것입니다. 데이터가 너무 커지면 데이터를 메모리에 남겨 둘지 디스크에 저장할지 여부를 지정하는 구성도 있다고 생각합니다.

+0

위에서 주신 의견에 대한 포인터 또는 작업 예제를 공유해주십시오. 감사합니다 – gurvinder372

+0

@ gurvinder372 어떤 댓글에 대해? 나는 많은 것들을 언급했다 :) 당신은 실제로 무엇을 알아야합니까? – jbx

+0

마지막으로 댓글을 남겼습니다. – gurvinder372