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();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
RocketMq(3) - 트랜잭션이 포함된 메시지 보내기트랜잭션 지원 메시지 RocketMq는 트랜잭션이 있는 메시지를 전송하여 데이터의 최종 정합성을 유지할 수 있도록 지원합니다.다음은 제가 간단하게 사무가 있는 소식을 실현하겠습니다. 생산자단 코드 트랜잭션 검사를 작...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.