jetstream-api 0.7.3__tar.gz → 0.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jetstream_api-0.7.3/jetstream_api.egg-info → jetstream_api-0.7.4}/PKG-INFO +36 -1
- jetstream_api-0.7.3/PKG-INFO → jetstream_api-0.7.4/README.md +556 -567
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/__init__.py +1 -1
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/admintopic.py +22 -4
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/common.py +5 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/connectivity.py +54 -32
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/pattern.py +135 -23
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/qmgr.py +8 -1
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/topic.py +57 -25
- jetstream_api-0.7.3/README.md → jetstream_api-0.7.4/jetstream_api.egg-info/PKG-INFO +602 -521
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/pyproject.toml +1 -1
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/LICENSE.txt +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/admin.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/exception.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/msg.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/partitioner.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/producer.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/properties.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/py.typed +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/ilink/util.py +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/jetstream_api.egg-info/SOURCES.txt +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/jetstream_api.egg-info/dependency_links.txt +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/jetstream_api.egg-info/requires.txt +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/jetstream_api.egg-info/top_level.txt +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/setup.cfg +0 -0
- {jetstream_api-0.7.3 → jetstream_api-0.7.4}/tests/test_example.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jetstream-api
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
|
|
5
5
|
Author: snowjeans
|
|
6
6
|
License: Boost Software License - Version 1.0 - August 17th, 2003
|
|
@@ -54,6 +54,41 @@ Python으로 작성된 ILink 클라이언트 API입니다.
|
|
|
54
54
|
## 설치 방법
|
|
55
55
|
pip install jetstream-api
|
|
56
56
|
|
|
57
|
+
## 0.7.4 변경 - 패턴 토픽 떼어 내기 = 그룹 탈퇴(LEAVE), seek 규칙 (자바 v2.3.5 와 같음)
|
|
58
|
+
|
|
59
|
+
- **엔진 요구**: 아래 새 동작은 **엔진 7.0.1.3417 이상**(CONSGRP-1)에서 나옵니다. 그보다 옛 엔진에서는 그룹 탈퇴 요청을 조용히
|
|
60
|
+
건너뛰고(예전처럼 패턴 구독을 닫을 때까지 멤버로 남습니다), 파티션을 생략한 `seek_to_offset()` 은 0번 파티션을 되감습니다.
|
|
61
|
+
클라이언트는 엔진 판을 따로 검사하지 않습니다.
|
|
62
|
+
- **패턴 구독 - 떼어 낸 토픽은 그룹에서 빠집니다**: 재평가로 더 이상 매칭되지 않거나 read 중 오류로 떼어 낸 토픽은 그 (토픽, 구독)
|
|
63
|
+
그룹에서 이 세션을 뺍니다(`MIMQ_TOPIC_LEAVE` = 3401). 엔진이 곧바로 재배정하므로 같은 구독 이름의 다른 멤버가 그 파티션을
|
|
64
|
+
이어받고, 커서는 남습니다. 예전에는 연결을 닫지 않으니 패턴 구독을 닫을 때까지 멤버로 남아 그 파티션을 아무도 읽지 않았습니다.
|
|
65
|
+
그 토픽이 실린 다중 토픽 read 가 엔진에 걸려 있는 동안은 보내지 않고(엔진이 `MIMQE_READ_IN_PROGRESS` 로 거절합니다) 그 read 가
|
|
66
|
+
돌아온 직후 / 다음 read 전에 보냅니다 - 다른 스레드의 `refresh_now()` 는 걸린 read 를 기다리지 않고 돌아옵니다. best-effort 라
|
|
67
|
+
실패(구독 없음, 옛 엔진, 통신 실패)는 앱에 올리지 않습니다. 패턴 `close()` / `unsubscribe()` 와 단일 토픽 구독의 `close()` 는
|
|
68
|
+
그대로입니다(연결을 닫으면 엔진이 멤버를 뺍니다).
|
|
69
|
+
- **seek 는 이 멤버에게 배정된 파티션만**: 배정 밖 파티션이면 `ILOperationException`
|
|
70
|
+
(`MIMQE_TOPIC_REBALANCED (partition N is not owned by this member)`) 입니다. 재배정 통지가 아니라 거절이라 받아 둔 레코드는
|
|
71
|
+
그대로이고 다시 보내지 않습니다. 아직 read 하지 않은 구독은 그룹에 멤버가 하나도 없을 때만 seek 할 수 있습니다 - "subscribe →
|
|
72
|
+
seek → read" 는 혼자일 때만 되고, 다른 멤버가 있으면 첫 read 로 배정 통지를 받은 뒤(예: `set_rebalance_listener()` 콜백 안)
|
|
73
|
+
seek 하세요. `assign()` 구독은 배정 목록 밖 파티션이면 `(Partition : N not in manual assignment)` 사유로 거절됩니다. 관리 연결
|
|
74
|
+
(`ILAdminTopicSubscription`)의 seek 는 그룹에 멤버가 없을 때만 됩니다.
|
|
75
|
+
- **`seek_to_offset(offset)` - 파티션 생략은 엔진이 정합니다**: 0.7.3 은 생략하면 `;partition:0` 을 붙였습니다. 이제 `offset:N`
|
|
76
|
+
그대로 보냅니다. 새 엔진은 파티션이 하나인 토픽에서만 받고, 다중 파티션 토픽이면 `MIMQE_INVALID_ARGUMENT (Partition : REQUIRED,
|
|
77
|
+
Available : 0~N)` 로 거절합니다 - **다중 파티션 토픽에서는 `partition` 을 주세요.** 옛 엔진은 0번 파티션을 되감습니다. 성공하면
|
|
78
|
+
받아 둔 레코드는 0번 파티션 것만 버리고, 거절되면 아무것도 버리지 않습니다.
|
|
79
|
+
- **`seek_to_time(epoch_ms, partition=-1)`** (`seekToTime(epochMs, partition)`): 파티션을 줄 수 있습니다(`time:T;partition:P`,
|
|
80
|
+
받아 둔 레코드도 P 것만 버립니다). 새 엔진은 이 멤버에게 배정된 파티션만 옮기고(파티션을 주면 그 파티션만), 돌려주는 값은 옮긴
|
|
81
|
+
파티션 중 번호가 가장 작은 파티션의 결과 오프셋입니다(옮긴 것이 없으면 -1). 옛 엔진은 파티션을 무시하고 구독 전체를 옮기며
|
|
82
|
+
0번 파티션의 결과를 줍니다 - 옛 엔진에서는 파티션을 주지 마세요.
|
|
83
|
+
- **문서**: `ILAdminTopicSubscription.seek_to_offset()` 의 "`-1` 이면 전 파티션" 은 틀린 설명이었습니다(엔진은 0번 파티션만
|
|
84
|
+
되감았습니다).
|
|
85
|
+
- **NIO 커넥터(`TCPConnectorNIO`)도 송수신이 실패하면 연결을 닫습니다**(기본 커넥터와 같게): 전에는 큰 프레임을 받다가 시간이 다하면
|
|
86
|
+
나머지가 소켓에 남은 채 연결이 살아 있어 같은 연결의 다음 요청이 그 조각부터 읽었고(`invalid transmission delimiter`), 자동 확인
|
|
87
|
+
GET 이면 그 메시지를 잃었습니다. 상대가 프레임 중간에 끊으면 끝없이 돌던 것도 곧바로 `MIMQE_NIO_ERROR` 로 끝나고, 기한이 지났어도
|
|
88
|
+
소켓에 다 와 있는 프레임은 돌려주며, 보낼 자리가 없을 때(`BlockingIOError`) 곧바로 실패하던 송신은 기다렸다 이어 보냅니다. 기본
|
|
89
|
+
(블로킹) 커넥터에서도 프레임 중간에 시간이 다한 자동 확인 GET 의 메시지는 잃습니다(최대 한 번 전달) - 아주 큰 메시지는 GET 대기
|
|
90
|
+
시간 / 세션 시간 초과를 넉넉히 주거나 트랜잭션 GET(`auto_commit=False` 세션 + `commit()`)을 쓰세요.
|
|
91
|
+
|
|
57
92
|
## 0.7.3 변경 - 구독마다 전용 연결, 소비 프로토콜 v5, 발행 / 소비 CPU 절감 (자바 v2.3.4 와 같음)
|
|
58
93
|
|
|
59
94
|
- **엔진 요구**: 토픽 구독은 **엔진 7.0.1.3415 이상**(소비 프로토콜 v5)에서만 동작합니다. 그보다 옛 엔진은 요청 태그를
|