프로젝트가 데이터를 전달하고 수신해야 하기 때문에, 데이터의 양이 비교적 많아 하루에 약 300만 개의 데이터가 처리됩니다
처음에는 http post로 데이터를 제출했지만, 너무 느리고 전송 속도가 수신 속도보다 훨씬 느렸습니다.
따라서 긴 소켓 연결을 사용해 데이터를 푸시하고 수신하고, 소켓 서버와 클라이언트를 직접 작성하려면 시간 낭비이지만, 잘 구현되지 않을 수도 있습니다
마지막으로, activemq는 데이터를 푸시하고 수신하는 데 사용됩니다
첫째, 생산자 코드는 다음과 같습니다:
소비자 입장에서는 두 가지 모델이 있습니다:
1: 일반 구독, 지속적인 '구독'이 필요 없음, 즉 연결 시 메시지를 받을 수 있고, 연결 전에는 메시지를 받을 수 없습니다. "CreateConsumer"를 사용해 2: 지속 구독, 연결 후 "CreateDurableConsumer"를 사용해 이전에 푸시되지 않은 데이터를 받을 수 있습니다.
CreateDurableConsumer 도입 링크:하이퍼링크 로그인이 보입니다.
지정된 주제에 대해 비공유 영구 구독을 생성하고, 그 영구 구독에 소비자를 생성하세요. 이 방법은 메시지 선택기를 사용하지 않고 영구 구독을 생성하며, noLocal 값은 false입니다. 애플리케이션은 영구 구독을 사용하며, 해당 주제에 대해 게시된 모든 메시지를 받아야 하며, 활성 소비자가 없을 때 게시된 메시지도 포함합니다. JMS 제공업체는 이 지속 구독 기록을 보관하며, 해당 발행사로부터 온 모든 메시지가 소비자에게 전달될 때까지 보관되고 해당 구독이 만료될 때까지 확인되도록 보장합니다.
지속적인 구독은 메시지를 계속 누적하다가 구독 취소 방법으로 삭제됩니다.
이 방법은 비공유 영구 구독에서만 사용할 수 있습니다. 이 방법으로 생성된 영구 구독은 공유 해제됩니다. 즉, 한 번에 한 명의 활성 소비자(즉, 닫히지 않은) 소비자만 구독에 존재할 수 있습니다. 여기서 "consumer"라는 용어는 모든 클라이언트에서 TopicSubscriber, MessageConsumer, 또는 JMSConsumer 객체를 의미합니다.
비공유 영구 구독은 클라이언트가 지정한 이름과 설정해야 하는 클라이언트 식별자로 식별됩니다. 비공유 영구 구독에서 소비자를 생성하려는 애플리케이션은 동일한 클라이언트 식별자를 사용해야 합니다.
동일한 이름과 클라이언트 식별자를 가진 공유 되지 않은 영구 구독이 이미 존재하고, 동일한 주제, 메시지 선택기, noLocal 값이 지정되어 있으며, 해당 영구 구독에 활성 상태(즉, 닫히지 않은 상태)가 없다면, 이 방법은 MessageConsumer에 기존 지속 구독을 생성합니다.
동일한 이름과 클라이언트 식별자를 가진 비공유 영구 구독이 이미 존재하고, 해당 영구 구독에 이미 활성 상태(즉, 닫히지 않은 상태)의 소비자가 있으면 JMSException이 실행됩니다.
이미 동일한 이름과 클라이언트 식별자이지만 주제가 다른 비공유 영구 구독이 있고, 메시지 선택기 또는 noLocal 값이 지정되어 있으며, 영구 구독에 아직 활성 상태(즉, 닫히지 않은 상태)가 없다면, 이는 기존 구독을 취소(삭제)하고 새 구독을 생성하는 것과 동일합니다.
공유 구독과 비공유 영구 구독은 이름과 클라이언트 신원이 다를 수 있습니다. 동일한 이름과 클라이언트 식별자를 가진 공유 영구 구독이 이미 존재한다면, JMSException이 실행됩니다.
동일한 이름과 clientID를 가진 영구 구독과 공유 비영구 구독에 제한이 없습니다. 이러한 구독은 완전히 별도로 제공됩니다.
이 메서드는 해당 메서드인 createDurableSubscriber 메서드와 동일하지만, 소비자를 나타내기 위해 TopicSubscriber 대신 MessageConsumer 반환합니다.
매개 변수: 주제 - 비임시 주제 구독 이름 - 이 구독을 식별하는 데 사용된 이름 던지기: InvalidDestinationException - 잘못된 주제가 지정된 경우. IllegalStateException - 게스트 식별자가 설정되어 있지 않을 경우 JMSException - 세션이 내부 오류로 인해 비공유 영구 구독과 MessageConsumer 생성에 실패할 경우 동일한 이름과 클라이언트 식별자를 가진 비공유 영구 구독이 이미 존재하고, 소비자가 이미 활성화되어 있다면 동일한 이름과 클라이언트 식별자를 가진 공유 영구 구독이 이미 존재한다면 이후: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopic destination, string name, string selector, bool noLocal);
여기서 messageSelector는 메시지 선택기입니다; noLocal 플래그는 기본적으로 false이며, true로 설정하면 소비자가 자신과 동일한 연결로 게시된 메시지만 수신할 수 없게 제한되며, 이는 대기열에는 적용되지 않고 주제에만 적용됩니다. 이름은 구독 주제의 고유 식별이며, 이 매개변수는 영구 구독 시 설정되어야 합니다.
Activemq .net은 패키지 다운로드를 참조해야 합니다:하이퍼링크 로그인이 보입니다.
전체 소스 코드 다운로드:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|