주제에서 메시지를 제거하는 방법

LuBa :

JMS 게시 구독 모델을 사용하는 애플리케이션을 작성하려고합니다. 그러나 나는 좌절에 빠졌고 게시자가 주제에서 메시지를 삭제할 수 있기를 원합니다. 유스 케이스는 내가 영구 가입자가 있고 활성 가입자가 메시지를 받게되지만 (거의 즉각적이기 때문에) 비활성 가입자가 있고 게시자가 메시지가 잘못되었다고 판단하면 메시지를 삭제할 수 있도록하고 싶습니다. 구독자가 활성화되면 더 이상 수신하지 않습니다. 문제는 이것이 어떻게 / 가능한지 모르겠다는 것입니다. 공급자의 경우 glassfish의 구현을 결정했지만 다른 대안이이 기능을 제공하는 경우 전환 할 수 있습니다.

감사합니다.

T.Rob :

JMS는 비동기 메시징의 한 형태이므로 게시자와 구독자는 설계 상 분리됩니다. 이것은 당신이 요구하는 것을 할 메커니즘이 없다는 것을 의미합니다. 게시 시점에 활성 상태 인 구독자의 경우 조치를 취할 시간 내에 삭제 메시지를받을 기회없이 메시지를 소비합니다. 구독자가 오프라인이면 비동기 메시지는 원 자성이어야합니다. 다른 응답자의 답변 디자인을 진행하면 (삭제 메시지를 생성하고 삭제 메시지를 찾기 위해 전체 대기열을 읽으려면 소비자를 다시 연결해야 함) 가입자 여부에 따라 시스템 동작이 다른 상황이 생성됩니다. 특정 메시지 / 삭제 조합이 게시되었을 때 온라인 상태 였거나 그렇지 않았습니다. 게시자가 삭제 메시지를 보내기 직전에 구독자가 보유 된 메시지 읽기를 완료하는 경쟁 조건도 있습니다. 즉, 이러한 조건을 조정하고 경쟁 조건을 조정하기 위해 구독자에게 중요한 논리를 입력해야합니다.

이를 수행하는 데 허용되는 방법은 "보상 거래"라고하는 것입니다. 생산자와 소비자가 단일 작업 단위를 공유하지 않거나 공통 상태를 공유하지 않는 시스템 (예 : 동일한 DB를 사용하여 상태 저장)에서 이전 트랜잭션을 취소하거나 수정하려면 첫 번째 트랜잭션을 되 돌리는 두 번째 트랜잭션이 필요합니다. 물론 소비자는 보상 거래를 올바르게 적용 할 수 있어야합니다. 이 패턴을 사용하면 메시지가 실시간으로 사용되는지 아니면 소비자가 다시 시작된 후 일괄 처리로 사용되는지에 관계없이 모든 구독자가 동일한 동작을 나타냅니다.

보상 트랜잭션은 "삭제 메시지"와 다릅니다. 다른 응답자의 답변에서 제안 된 삭제 메시지는 메시지 스트림 자체에 영향을 미치는 명령 및 제어의 한 형태입니다. 반면에 보상 트랜잭션은 시스템 상태의 트랜잭션 업데이트를 통해 시스템 상태에 영향을줍니다.

일반적 으로 명령 및 제어 기능으로 메시지 스트림을 조작하여 시스템 상태를 관리하고 싶지는 않습니다 . 이는 취약하고 공격에 취약하며 감사 또는 디버그가 매우 어렵습니다. 대신 서비스 품질 제약 조건에 따라 모든 메시지를 전달하고 모든 메시지를 처리하도록 시스템을 설계하십시오. 애플리케이션에서 전적으로 상태 변경 (이전 작업 취소 포함)을 처리합니다.

예를 들어, 거래가 초과 인출 수수료와 같은 2 차 효과를 유발하는 은행에서 일반적인 절차는 하루 동안 거래를 "메모 게시"한 다음 은행이 폐쇄 된 후 일괄 적으로 정렬하고 적용하는 것입니다. 이를 통해 초과 인출 수수료가 발생 하기 전에 실수를 조정할 수 있습니다 . 최근에는 거래가 실시간으로 적용되지만 당일 장부가 마감 될 때까지 트리거가 보류되어 동일한 결과를 얻습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Service Bus 주제 구독에 대한 메시지를 제거하는 방법

Windows에서 git pull 메시지를 제거하는 방법

SOAP 메시지에서 빈 헤더를 제거하는 방법?

큐에서 메시지를 제거하는 방법

kafka 2.1.0 버전에서 주제를 제거하거나 삭제하는 방법

Android에서 주제에 메시지를 보내는 방법

Android에서 주제로 Firebase 메시지를 보내는 방법

Android에서 주제로 Firebase 메시지를 보내는 방법

Twilio를 사용하여 TCHMessage에서 메시지를 제거하는 방법

임시 메시지를 제거하는 방법

Kafka 주제에서 최신 메시지를 검색하는 방법

kafka 주제에서 대용량 메시지를 사용하는 방법

주어진 경로에서 ..를 제거하는 방법

신호에서 주파수를 제거하는 방법

WooCommerce에서 "배송비 업데이트"메시지를 제거하는 방법

Flutter의 TextFormField에서 오류 메시지를 제거하는 방법

Buddypress 프로필에서 Gravatar 메시지를 제거하는 방법

Outlook 2013에서 나이 또는 메시지 수를 기준으로 메시지를 제거하는 방법

GPT-2 경고 메시지를 제거하는 방법?

SYSLINUX 저작권 메시지를 제거하는 방법?

오류 메시지를 제거하는 방법?

불필요한 PowerShell 메시지를 제거하는 방법

jQuery [object Object] 메시지를 제거하는 방법

오류 메시지를 제거하는 방법

Google Plus 버튼 메시지를 제거하는 방법?

ffmpeg 디버그 메시지를 제거하는 방법

RSS에서 Yammer 메시지로 HTML을 제거하는 방법

kafka 서버에서 주제의 모든 메시지를 얻는 방법

R에서 \를 제거하는 방법

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관