320 likes | 759 Views
Java Message Service(JMS) 란? Message-Oriented Middleware(MOM) 상의 Application 은 Message 를 통하여 정보를 교환, 또는 이벤트를 발생 자바에서 이러한 MOM 또는 Enterprise Messaging System 에 접근하는 표준 API 가 JMS 임 개별 Enterprise Messaging System 에 대한 추상화 구현 메시지 생성의 표준 API 를 제공함으로써 Application 개발 용이. JMS. Weblogic
E N D
Java Message Service(JMS) 란? Message-Oriented Middleware(MOM)상의 Application은 Message를 통하여 정보를 교환, 또는 이벤트를 발생 자바에서 이러한 MOM 또는 Enterprise Messaging System에 접근하는 표준 API가 JMS임 개별 Enterprise Messaging System에 대한 추상화 구현 메시지 생성의 표준 API를 제공함으로써 Application 개발 용이 JMS Weblogic JMS IBM MQ Sonic MQ JMS 개요 Producer Consumer Message Message
Weblogic JMS의 특징 JMS Spec 1.0.2Version 구현 Clustering 지원(분산 Destination) 이기종간 메시지 전송 지원 JTA를 통한 분산 Transaction 및 2Phase Commit 지원 File 또는 DB를 통한 Persistent 지원 XML 메시지 지원 Weblogic JMS의 특징
용어 정리 Message Model Point to Point 모델 : 받는 눔(?)이 하나이다 Publish/Subscribe 모델 : 받는 눔(?)이 여럿이다. JMS 용어 정리 1 Pub/Sub 방식 PTP 방식
Message Persistence 메시지는 Persistent / Non Persistent 로 구분 가능 Persistent Message 무조건 한번만 클라이언트에게 전달 일단 JMS 서버가 해당 메시지를 다 받을 때 까지는 receiver 에게 전송되지 않음 JMS 서버는 메시지를 받아 일단 저장 장소(file or db ) 에 저장한 이후에 발송 JMS 서버가 Fail 되더라도 메시지는 보존 가능 Non Persistent Message JMS 서버가 Fail 되지 않으면 한번만 클라이언트에게 전달 가능 JMS 서버 Fail시 해당 메시지를 잃어 버릴 수 있음 ConnectionFactory Factory 내부적으로 설정된 Connection 정보를 가지고, 개발 Application 에서 필요한 Connection을 생성하게 한다. JNDI Binding : 기본 제공 (javax.jms.QueueConnectionFactory, javax.jms. TopicConnectionFactory, weblogic.jms.ConnectionFactory), 새로 생성 가능 하위 인터페이스 : QueueConnectionFactory, TopicConnectionFactory JMS 용어 정리 2
Connection 개발 App 과 JMS 서버 간의 연결 ConnectionFactory에 의해 생성 인증을 통한 JMS 서버 연결 가능(username, password) 생성시는 정지 상태(stop)이고, 관련된 설정을 다 잡은 뒤에 시작(start) 사용 중에도 stop가능 이 경우 receive쪽에서 blocking 가능 하위 인터페이스 : QueueConnection, TopicConnection Session 메시지의 순서를 정렬하고, 실제 메시지를 전송/수신하는 MessageProducer 및 MessageConsumer를 생성 Connection에 의해 생성 단일 스레드 모델 : 한번에 하나의 처리가 이루어짐 하위 인터페이스 : QueueSession, TopicSession JMS 용어 정리 3
Acknowledge Mode Non-Transacted Session 에서만 유효함 AUTO_ACKNOWLEDGE Session에서 자동으로 받은 메시지에 대한 접수를 알린다. CLIENT_ACKNOWLEDGE 개발자가 acknowledge()함수를 호출함으로써 Acknowledge가 발생 Acknowledge 발생시 마지막으로 Acknowledge된 이후의 메시지 부터 지금 메시지 까지 Acknowledge Session의 recover() 함수를 통하여 재 전송 가능 DUPS_OK_ACKNOWLEDGE Session에서 자동으로 메시지의 도착에 대한 인지를 알린다. 하지만 Acknowledge를 하나의 메시지 별로 하지 않고, Buffering해서 한꺼번에 하기 때문에 Duplication이 가능하다 NO_ACKNOWLEDGE 메시지에 대한 도착 인지를 하지 않는다. MULTICAST_NO_ACKNOWLEDGE 특정한 그룹에 동시에 메시지를 보내는 Multicast방식에서는 메시지 도착여부는 주요하지 않음 Multicast 환경에서 메시지 도착을 인지 하지않는다. JMS 용어 정리 4
Destination 실제 메시지가 도착하는 곳(사서함, 송신소) JMS 서버에 설정에 설정됨 ConnectionFactory와 동일하게 JNDI lookup을 통해서 얻어짐 영속적인 Dest와 임시 Dest 있음 하위 인터페이스 : Queue, Topic, TemporaryQueue, TemporaryTopic Message Producer/Consumer Session을 통해서 메시지를 Destination 에 보내는 역할 또는 받는 역할을 하는 객체 Session에 의해 생성 단일 스레드 방식 하위 인터페이스 : QueueSender, QueueReceiver, TopicePublisher, TopicSubscriber JMS 용어 정리 5
Message Header : 메시지에 대한 각종 헤더 정보(스펙에서 정의) Message Properties : 메시지에 대한 추가 정보 Message Body Message : Body없는 Message 인터페이스/메시지 Body 최상위 인터페이스 TextMessage : String 객체 StreamMessage : primitive type과 String 객체에 대한 Stream BytesMessage : byte에 대한 Stream ObjectMessage : Serializable 을 구현한 Object MapMessage : primitive type과 String 객체에 대한 이름=값의 쌍 XMLMessage : XML, TextMessage의 일종, weblogic.jms.extensions.XMLMessage JMS 용어 정리 6
JMS Server 설정 관리콘솔JMSServersConfigure a new JMSServer JMS Sever 설정 1
Thresholds and Quotas JMS Sever 설정 2 Topic/Queue 상에 저장되는 메시지의 최대 바이트량 메모리상에 저장된 메시지의 크기(바이트)가 수치 이상이 되면 Paging 시작 메모리상에 저장된 메시지의 크기(바이트)가 수치 이하가 되면 Paging 멈춤 메시지의 바이트 크기가 위의 high/low 사이면 페이징 가능하게 함 Topic/Queue 상에 저장되는 메시지의 최대 매시지량 메모리상에 저장된 메시지의 크기(메시지 수)가 수치 이상이 되면 Paging 시작 메모리상에 저장된 메시지의 크기(메시지 수)가 수치 이하가 되면 Paging 멈춤 메시지의 메시지 수치가 위의 high/low 사이면 페이징 가능하게 함
Destination 설정 관리콘솔 JMSJMS Servers MyJMSServer JMS Destinations JMS Sever 설정3
Overrides JMS Sever 설정4 Message Producer에 의해 설정된 Priority 를 Override Message Producer에 의해 설정된 TimeToLive 를 Override Message Producer에 의해 설정된 Time To Deliver 를 Override Message Producer에 의해 설정된 Delivery Mode 를 Override (No-Delivery : Not Chage)
Redelivery JMS Sever 설정5 ConnectionFactory에서 설정된 재전송 지연시간을 Override 재전송 제한 횟수 에러가 난 메시지를 다른 도착지로 보낼 경우에 설정
JMS Chatting 예제 구현 JNDI를 통해서 ConnectionFactory를 가져온다 JNDI를 통해서 Destination을 가져온다 ConnectionFactory를 이용해서 Connection 을 생성한다 Connection을 이용해서 Session을 생성한다 Session과 Destination을 이용해서 메시지를 전송하면 MessageProducer를 메시지를 수신하면 MessageConsumer를 생성한다.이때 비동기적으로 수신할 경우 MessageListener객체를 만들어서 MessageConsumer에 등록한다. Connection 을 start()해서 메시지 전송/수신 한다. JMS 예제 1
JMS Connection Factory 설정 관리콘솔JMSConnection FactoriesConfigure a new JMS Connection Factory JMS Connection Factory 설정 1 Connection Factory의 JNDI Name Durable subscription 환경에서 해당 메시지를 받을 Client의 ID
JMS Connection Factory 설정 관리콘솔JMSConnection FactoriesConfigure a new JMS Connection Factory JMS Connection Factory 설정 2 메시지를 Delivery Mode : Persistent, non-Persistent 메시지가 위의 Max값을 초과 했을때 메시지 유지 정책 onMessage()함수 상에서 Connection Close()를 할 수 있는지 여부 Client가 acknowledge() 함수를 실행 했을 경우 Acknowledge 정책 모드 분산 JMS Destination용 설정 메시지 발송 시 Load balance 위의 Load Balancing 중에 되도록이면 Local JVM상 Destination을 이용
Transactions 관리콘솔JMSConnection FactoriesJMS Connection Factory Transacton JMS Connection Factory 설정 3 Transaction Session에서 타임아웃 시간 진행 중인 UserTransaction에 참여 여부 Remote Client 에서 호출 시 2PC 사용 여부 EJB와 같이 Weblogic 서버 안에서 호출 시 2PC 사용여부
Flow Control 관리콘솔JMSConnection FactoriesJMS Connection Factory Flow Control JMS Connection Factory 설정 4 기간과 스텝을 통해서 Flow가 증가/감소 그림의 경우 6초에 한번씩 Flow가 증가 / 감소
File Store 설정 관리콘솔JMSStoresConfigure a new JMSFile Store JMS Store 설정 1 File 저장 정책 Disabled : OS에 의해 Cache-Flush : Cache를 이용 Direct-Write : 막바로(?)
JDBC Store 설정 관리콘솔JMSStoresConfigure a new JMS JDBC Store JMS Store 설정 2 PreFix_JMSState, PreFix_ JMSStore 테이블 생성 지원 DB : 오라클 , DB2, Infomix, MS-SQL, Sybase, PointBase
Sort Message 일반적으로 메시지는 시간에 정렬되어 감 특정한 이유로 한번에 여러 메시지가 전송될 경우는 해당 메시지 간의 순서가 섞일 수 있음 예) Queue에 여러 메시지가 쌓여 있는데 해당 receiver 가 등록 되었을 경우 이럴 경우 메시지 헤더 정보 및 properties를 통해서 메시지 정렬 필요 정렬 기준 Message Header (성능상 우수, 권고) JMSMessageID , JMSTimestamp, JMSCorrelationID , JMSPriority , JMSExpiration , JMSType , JMSRedelivered , JMSDeliveryTime Message Properties Destination Key 설정 1
Destination Key 설정 2 Unique Name Message Header / Properties Properties 일 경우 property의 자료 형 오름 차순 / 내림 차순
분산 Destination 1 P2P Que 분 산 Q U E U E 분 산 Q UE U E Cosumer Producer Que Que 장애 발생시 다른 Queue로 Forwording
분산 Destination 2 Pub/Sub Topic Cosumer 분 산 T O P I C 분 산 T O P I C Cosumer Producer Topic Cosumer Topic 장애 발생시 다른 토픽이 하나라도 있으면 그 토픽을 통하여 전체 Conumer에게 전송
분산 Destination 설정 1 Unique 한 이름 분산 Detination JNDI Name Round Robin : 돌아가면서 해당 Destination을 사용 Random : Random 하게 해당 Destination 사용 Queue 전용 설정 항목 : 해당 큐에 등록된 Consumer가 없을 경우 다른 Queue로 메시지를 Forwording 하지 전의 대기 시간
분산 Destination 설정 2 분산 Destination Member Name Unique 분산 Destination Member Queue / Topic 분산 Destination에서 해당 Member의 가중치 Random 시 참고 사항
2PC를 사용한 분산 트랜잭션 예제 Weblogic Example 예제 (C:\bea\weblogic700\samples\server\src\examples\jta\jmsjdbc) Queue를 통해서 여러 메시지를 전송 위에서 전송된 메시지를 Session Bean 에서 DB에 입력 JMS , JDBC 2PC 예제
Weblogic 상에서 Mail 지원 Weblogic 내부에는 Mail Server 없음 weblogic.jar 내부에 필요한 클래스만 포함 하고 있음 (IMAP, SMTP, POP 클래스는 없음: Sun에서 다운 로드 받아야 함) Mail Session의 설정을 통해서 JNDI를 통해서 Mail 자원에 접근 가능 기본 설정은 Mail Session 설정을 통해서 잡고, 추가 설정은 소스상에서 가능함 Mail Session Property mail.store.protocol : imap, pop 예) mail.store.protocol=imap mail.transport.protocol : smtp 예) mail.transport.protocol=smtp mail.host : 해당 메일 호스트 예) mail.host=mail.mydom.org mail.protocol.host mail.smpt.host=mail.mydom.org mail.imap.host=mail.mydom.org Java Mail Session
mail.user : 해당 메일 서버의 접근 관리자 (mail.user=postmaster) mail.protocol.user : 해당 프로토콜의 사용 유저 mail.from : 기본 Return Address mail.debug : 디버깅 모드(true : 디버깅, false : 일반) Java Mail Session
Java Mail Session Unique 한 이름 JNDI Name Mail Property 설정