이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 13505|회답: 2

ActiveMQ 영구 구독 설정

[링크 복사]
게시됨 2017. 1. 9. 오전 11:12:10 | | |

ActiveMQ 영구 구독 설정
퍼블리셔의 PERSISTENT 전달 모드를 설정하면 구독자에게 영구 구독을 적용할 수 있어, Pub/Sub 프로그램이 모든 게시된 메시지를 수신하도록 보장합니다.
메시지 구독은 비내구 구독과 내구 구독으로 나뉘며, 비내구 구독은 클라이언트가 활성 상태일 때만 메시지를 받을 수 있습니다. 즉, 클라이언트가 오프라인일 때는 이 기간 동안 해당 주제로 전송된 메시지는 손실되어 수신되지 않습니다. 클라이언트가 오프라인일 때는 ActiveMQ가 해당 ID에 따라 해당 인물에게 전송된 모든 메시지를 저장하고, 클라이언트가 다시 ActiveMQ에 접속하면 오프라인 상태에서 해당 인물에게 전송된 모든 메시지를 받게 됩니다. 지속 구독은 오버헤드를 증가시키고, 한 번에 한 명의 활성 사용자만 가입할 수 있습니다. 지속적인 구독을 설정하는 단계:
1. 연결용 고객 ID를 설정하기;
2. 구독 주제에 대한 구독 이름을 지정함;
위의 조합은 반드시 고유해야 합니다.
코드는 영구 구독을 구현합니다

(1) 큐를 사용할 때, 즉 대기열 시 메시지당 한 명의 소비자만 존재하므로 지속성은 매우 간단합니다. 데이터베이스에 저장하기만 하면 됩니다

。 그 후 소비자는 직접 주워서 폐기할 수 있습니다. 소비자가 잠시 끄는 것은 중요하지 않습니다.

(2) 토픽을 사용할 때, 즉 구독할 때 각 메시지에 여러 소비자가 있을 수 있어 더 번거롭습니다.

첫째, 소비자가 일반 소비자라고 가정하면,
------------------------
<1> activemq가 출시된 후 뉴스 1이 출시되었지만, 안타깝게도 현재는 구독자가 없어 구독자가 없습니다. 그래서

뉴스는 버려졌다.

<2> 소비자 1이 시작되어 activemq에 연결되고 구독 후 메시지를 기다렸습니다~~

activeMQ는 메시지 2를 게시하고, OK를 입력하고, 소비자 1이 이를 받고 처리합니다. 메시지 버림.

<3> Consumer 2도 출시되어 activemq에 연결되고 구독 중이며, 메시지를 기다리고 있습니다~~

activeMQ는 메시지 3, OK, consumer 1, consumer 2를 모두 수신하고 처리합니다. 메시지 버림.

<4> 소비자 1이 꺼져 있습니다.

activemq가 메시지 4를 게시하고, OK, consumer 2가 수신하고 처리합니다. 메시지 버림.

<5> 소비자 1이 다시 시작했습니다.

activeMQ는 메시지 5, OK, 소비자 1, 소비자 2를 모두 수신하고 처리합니다. 메시지 버림.
-----------------------------
요약하자면:
ActiveMQ는 단순히 현재 실행된 소비자에게 메시지를 전송합니다.
꺼진 소비자는 많은 메시지를 놓치고 다시 받을 수 없게 됩니다.

중요한 사용자 동기화 데이터가 전송되었고 놓치면 사용자 데이터가 동기화되지 않은 것입니다.

그렇다면 소비자가 재시작할 때 부재중 메시지를 어떻게 받도록 할 수 있을까요?

그 답은 지속적인 구독입니다.
-----------------------------

일반 구독자들은 소비자를 구분하지 않고, 장소에 몇 명만 있으면 찐빵 몇 개를 던져줍니다.
지속 구독의 경우, 소비자 이름을 기록해야 합니다.
장산이 말했다, "나는 장산이야, 찐빵이 있어, 내가 다시 가지러 올게."
리스가 말했어, 나는 리스야, 찐빵이 있어, 다시 가지러 올게.
activemq는 장산과 리스의 이름을 적었다.

그리고 찐빵을 나눌 때도 한쪽 머리가 찐빵을 줍니다.
분열이 끝난 후, 장산이 말을 하지 않는 걸 보니 그가 없다는 뜻이니 그에게 남겨두라고 했다.
리스가 말했으니 굳이 머물 필요는 없었다.

장산이 돌아와서 activemq를 찾아보고 확인했는데, 이건 장산이 아니야, 빨리 찐빵 가져와.
찐빵 한 개일 수도 있고, 찐빵 백 개일 수도 있어요. 장산이 잠시 떠난 후 몇 개의 찐빵을 나눠뒀는지에 따라 다르죠.

ActiveMQ는 클라이언트ID와 가입자 이름으로 소비자를 구분합니다.
-----------------------------
연결을 만들어
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); 영구 구독은 이 설정을 해야 합니다.
connection.start();

세션 생성
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

목적지를 만드세요
Topic topic = session.createTopic("userSyncTopic"); 주제명

MessageConsumer consumer = session.createConsumer(topic); 정기 구독
MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); 지속 구독


또 다른 점은 메시지 생성자가 메시지를 보낼 때 영구 모드를 사용한다는 점입니다
MessageProducer 프로듀서 = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
그렇지 않으면 기본적으로 영속성입니다

(5) 동일한 "clientID"를 사용하면 동일한 소비자로 간주됩니다. 두 프로그램이 동일한 "clientID"를 사용할 경우, 한 프로그램만 동시에 activemq에 연결할 수 있고, 두 번째 연결은 오류를 보고합니다.

(6) activemq의 설정은 conf/activemq.xml에 있고, 기본 메시지는 data/kahadb에 저장되며, activemq를 재시작해도 메시지가 사라지지 않습니다.

현재 대기열, 주제, 지속 구독자 정보 보기, 메시지 전송 등 http://localhost:8161/admin/index.jsp 접근할 수 있습니다.

activemq-jdbc.xml에 내용을 복사해 수정할 수 있고, 메시지를 다른 데이터베이스에 저장할 수도 있습니다.




이전의:360도 티켓 취득 5세대 VIP 채널 해킹, VIP 라인에 빠르게 진입하세요
다음:. .Net 플랫폼
 집주인| 게시됨 2017. 1. 9. 오후 1:41:53 |
1 큐와 주제의 기술적 특성 비교
이름
주제
대기
개요
게시 구독 메시지 게시 구독 메시지 게시
포인트 투 포인트 투 포인트
국가는 존재하지 않습니다
주제 데이터는 기본적으로 상태가 없습니다.
큐 데이터는 기본적으로 MQ 서버에 파일로 저장되며, 예를 들어 Active MQ는 보통 $AMQ_HOME\data\kr-store\data 아래에 저장됩니다. DB 저장소로도 구성할 수 있습니다.
무결성 보장
출판사가 발행하는 모든 데이터가 구독자에게 반드시 받아들여진다는 보장은 없습니다.
큐는 수신자가 모든 데이터를 받을 수 있음을 보장합니다.
메시지가 사라질 수 있을지
일반적으로 출판사가 주제에 메시지를 게시할 때, 해당 주제 주소를 듣는 서브레딧만 메시지를 받을 수 있습니다. 만약 듣고 있는 서브가 없으면 주제가 사라집니다.
송신자는 대상 큐에 메시지를 보내고, 수신자는 이 큐에서 비동기적으로 메시지를 받을 수 있습니다. 대기열에 있는 메시지는 당분간 수신자가 없어도 사라지지 않습니다.
메시지 릴리스 수신 정책
일대다 메시지 게시 및 수신 정책으로, 동일한 주제 주소를 여러 서브가 듣는 경우 게시자가 보내는 메시지를 받을 수 있습니다. 서브는 MQ 서버로 알림을 받습니다
일대일 메시지 발행 및 수신 정책으로, 송신자가 보낸 메시지는 한 수신자만 받을 수 있습니다. 수신자가 수신한 후, MQ 서버는 수신 사실을 알리고, MQ 서버는 큐 내 메시지에 대해 삭제하거나 다른 조치를 취합니다.

 집주인| 게시됨 2017. 1. 9. 오후 1:42:15 |
주제와 큐의 가장 큰 차이점은 주제가 방송 형태로 이루어져 모든 온라인 청취 클라이언트에게 새 메시지가 있음을 알리고, 모니터링이 없는 클라이언트는 메시지를 받지 못한다는 점입니다; 반면 큐는 여러 리스닝 클라이언트 중 한 곳에 피어 투 피어 방식으로 알림을 보냅니다.

2 주제 방식과 큐 방식 간 메시지 처리 효율성 비교
        듣기 클라이언트의 동시성 수를 늘려 듣기 클라이언트의 동시성 증가로 인해 주제의 메시지 푸시가 크게 감소하는지 검증합니다.
        측정된 결과로 보면, 1명의 구독자와 100명의 구독자 전제에서 주제 메서드가 보내는 메시지 주고 수신 효율성에 유의미한 차이가 없지만, 500명의 구독자(스레드) 동시성을 가정할 때는 효율성 차이가 명확합니다(500개의 스레드가 동시적으로 작동하기 때문에 제 컴퓨터의 CPU 사용률이 70-90%에 달하므로, 로컬 테스트 때문인지 주제 메시지 전송 방식의 성능 병목 현상인지 확인할 수 없습니다). 이로 인해 효율성이 크게 저하된다).
        1명의 구독자와 100명의 구독자 전제에서 주제 방식과 큐 모드로 전송되는 메시지 송수신 효율성에는 유의미한 차이가 없지만, 500명의 가입자 동시성을 가정할 때는 토픽 모드의 효율성이 큐보다 현저히 낮습니다.
        큐 방식에서 전송된 메시지 송수신 효율성은 1명의 가입자, 100명의 가입자, 500명의 가입자 전제 하에서 크게 변하지 않습니다.
주제별 측정 데이터:


발신자가 보낸 총 메시지 수
모든 가입자가 받은 총 메시지 수
메시지를 주고받는 데 걸리는 평균 시간입니다
단일 가입자
100
100
101ms
구독자 100명
100
10000
103ms
구독자 500명
100
50000
14162ms

대기열 측정 데이터:


발신자가 보낸 총 메시지 수
모든 가입자가 받은 총 메시지 수
메시지를 주고받는 데 걸리는 평균 시간입니다
단일 가입자
100
100
96ms
구독자 100명
100
100
96ms
구독자 500명
100
100
100ms

면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com