ActiveMQ 메시지 서명 메커니즘 코드 실례 상세 설명

이 글 은 주로 ActiveMQ 메시지 서명 메커니즘 코드 인 스 턴 스 분석 을 소개 합 니 다.글 에서 예제 코드 를 통 해 매우 상세 하 게 소개 되 었 고 여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 기 때문에 필요 한 친 구 는 참고 할 수 있 습 니 다.
소비자 클 라 이언 트 가 성공 적 으로 메 시 지 를 받 은 표 지 는 이 소식 이 서명 되 었 다 는 것 이다.
소비자 클 라 이언 트 가 메 시 지 를 성공 적 으로 받 은 것 은 보통 세 단 계 를 포함한다.
1.소비자 가 메 시 지 를 받 는 것,즉 Message Consumer 의 receive 방법 에서 돌아 오 는 것
2.소비자 처리 소식
3.소식 수령
그 중에서 세 번 째 단계 의 서명 은 ActiveMQ 가 시작 할 수도 있 고 소비자 클 라 이언 트 가 시작 할 수도 있 으 며 Session 이 사 무 를 시작 하 는 지,서명 모델 의 설정 에 달 려 있다.
사 무 를 가 진 Session 에서 소비자 클 라 이언 트 사 무 를 제출 할 때 메 시 지 는 자동 으로 서명 을 완료 합 니 다.
트 랜 잭 션 이 없 는 Session 에서 메시지 가 언제,어떻게 서명 되 는 지 는 Session 의 서명 모드 설정 에 달 려 있 습 니 다.
비 사무 세 션 은 다음 과 같은 몇 가지 서명 모드 를 설정 할 수 있 습 니 다.
1.Session.AUTO_ACKNOWLEDGE
메시지 가 Message Consumer 의 receive 방법 에서 되 돌아 오 거나 Message Listener 인터페이스의 onMessage 방법 으로 되 돌아 올 때 세 션 은 자동 으로 메시지 서명 을 확인 합 니 다.
2.Session.CLIENT_ACKNOWLEDGE
소비자 클 라 이언 트 가 acknowledge 방법 으로 정 보 를 받 아야 합 니 다.이런 모델 은 실제 Session 차원 에서 서명 하고 받 아야 합 니 다.이미 소비 한 정 보 를 받 으 면 이 Session 이 소비 한 모든 정 보 를 자동 으로 받 습 니 다.
예 를 들 어 한 소비자 가 한 세 션 에서 5 가지 소식 을 소비 한 후에 3 조 소식 을 확인 하면 이 5 가지 소식 은 모두 서명 되 어 받 게 된다.
3.Session.DUPS_OK_ACKNOWLEDGE
이런 방식 은 JMS 가 급 하 게 받 은 소식 을 확인 하지 않 아 도 되 고 여러 소식 을 받 은 후에 한 번 에 확인 을 마치 고 Auto 와AcKnowledge 에 비해 이러한 확인 방식 은 어떤 경우 에 더욱 효과 적일 수 있 습 니 다.확인 되 지 않 았 기 때문에 시스템 이 붕괴 되 거나 네트워크 가 고장 이 났 을 때 소식 이 다시 전 달 될 수 있 습 니 다.
이러한 방식 은 메시지 의 중복 을 일 으 킬 수 있 으 나 Session 의 비용 을 낮 출 수 있 기 때문에 클 라 이언 트 만 중복 되 는 정 보 를 용인 할 수 있 습 니 다.(ActiveMQ 가 같은 메 시 지 를 다시 전송 하면 메시지 헤더 의 JMS Redelivered 가 true 로 설 정 됩 니 다)
트 랜 잭 션 사례
생산자
데 이 터 를 생산 한 후에 세 션 을 수 동 으로 제출 해 야 합 니 다.

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Producter {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :    ,JMS       
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS     JMS Provider    
  Connection connection = connectionFactory.createConnection();
  //    
  connection.start();
  // Session:              false:       session AUTO_ACKNOWLEDGE:      
  Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
  // Destination :      ;      .
  //   session     my-queue Query   
  Queue queue = session.createQueue("my-queue");
  // MessageProducer:       
  MessageProducer producer = session.createProducer(queue);
  //        PERSISTENT:      NON_PERSISTENT:      
  producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  //     
  for (int i = 1; i <= 5; i++) {
   sendMsg(session, producer, i);
  }
  System.out.println("    !");
  session.commit();
  session.close();
  connection.close();
 }
 /**
  *        ,                
  *
  * @param session
  *       
  * @param producer
  *        
  */
 public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException {
  //         
  TextMessage message = session.createTextMessage("Hello ActiveMQ!" + i);
  //            
  producer.send(message);
 }
}
소비자
데 이 터 를 소비 한 후 세 션 을 수 동 으로 제출 해 야 합 니 다.

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsReceiver {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :    ,JMS       
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS     JMS Provider    
  Connection connection = connectionFactory.createConnection();
  connection.start();
  // Session:              true:       AUTO_ACKNOWLEDGE:      
  Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
  // Destination :      ;      .
  //   session     xingbo.xu-queue       queue,   ActiveMq console  
  Queue queue = session.createQueue("my-queue");
  //    ,     
  MessageConsumer consumer = session.createConsumer(queue);
  while (true) {
   //receive():    
   TextMessage message = (TextMessage) consumer.receive();
   if (null != message) {
    System.out.println("    :" + message.getText());
    session.commit();
   } else {
    break;
   }
  }
  //    
  session.close();
  connection.close();
 }
}
트 랜 잭 션 없 는 사례
1.자동 수령

2.수 동 수령
생산자

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Producter {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :    ,JMS       
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS     JMS Provider    
  Connection connection = connectionFactory.createConnection();
  //    
  connection.start();
  // Session:              false:       session AUTO_ACKNOWLEDGE:      
  /* Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);*/
  Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
  // Destination :      ;      .
  //   session     my-queue Query   
  Queue queue = session.createQueue("my-queue");
  // MessageProducer:       
  MessageProducer producer = session.createProducer(queue);
  //        PERSISTENT:      NON_PERSISTENT:      
  producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  //     
  for (int i = 1; i <= 5; i++) {
   sendMsg(session, producer, i);
  }
  System.out.println("    !");
  session.close();
  connection.close();
 }
 /**
  *        ,                
  *
  * @param session
  *       
  * @param producer
  *        
  */
 public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException {
  //         
  TextMessage message = session.createTextMessage("Hello ActiveMQ!" + i);
  //            
  producer.send(message);
     message.acknowledge();  //    
  } 
}
소비자

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import sun.plugin2.os.windows.SECURITY_ATTRIBUTES;

import javax.jms.*;

public class JmsReceiver {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :    ,JMS       
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS     JMS Provider    
  Connection connection = connectionFactory.createConnection();
  connection.start();
  // Session:              true:       AUTO_ACKNOWLEDGE:      
  /*Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);*/
  Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
  // Destination :      ;      .
  //   session     xingbo.xu-queue       queue,   ActiveMq console  
  Queue queue = session.createQueue("my-queue");
  //    ,     
  MessageConsumer consumer = session.createConsumer(queue);
  while (true) {
   //receive():    
   TextMessage message = (TextMessage) consumer.receive();
   if (null != message) {
    System.out.println("    :" + message.getText());
    message.acknowledge();  //    
   } else {
    break;
   }
  }
  //    
  session.close();
  connection.close();
 }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기