@azure/service-bus 7.10.0-beta.2 → 7.10.0-beta.3
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.
- package/dist/browser/connectionContext.js +1 -2
- package/dist/browser/connectionContext.js.map +1 -1
- package/dist/browser/constructorHelpers.js +3 -4
- package/dist/browser/constructorHelpers.js.map +1 -1
- package/dist/browser/core/autoLockRenewer.js +9 -5
- package/dist/browser/core/autoLockRenewer.js.map +1 -1
- package/dist/browser/core/batchingReceiver.js +26 -18
- package/dist/browser/core/batchingReceiver.js.map +1 -1
- package/dist/browser/core/linkEntity.js +74 -13
- package/dist/browser/core/linkEntity.js.map +1 -1
- package/dist/browser/core/managementClient.js +48 -48
- package/dist/browser/core/managementClient.js.map +1 -1
- package/dist/browser/core/messageReceiver.js +41 -14
- package/dist/browser/core/messageReceiver.js.map +1 -1
- package/dist/browser/core/messageSender.js +33 -10
- package/dist/browser/core/messageSender.js.map +1 -1
- package/dist/browser/core/receiverHelper.js +3 -2
- package/dist/browser/core/receiverHelper.js.map +1 -1
- package/dist/browser/core/shared.js +11 -4
- package/dist/browser/core/shared.js.map +1 -1
- package/dist/browser/core/streamingReceiver.js +74 -43
- package/dist/browser/core/streamingReceiver.js.map +1 -1
- package/dist/browser/diagnostics/instrumentServiceBusMessage.js +16 -8
- package/dist/browser/diagnostics/instrumentServiceBusMessage.js.map +1 -1
- package/dist/browser/receivers/receiver.js +68 -23
- package/dist/browser/receivers/receiver.js.map +1 -1
- package/dist/browser/receivers/receiverCommon.js +36 -21
- package/dist/browser/receivers/receiverCommon.js.map +1 -1
- package/dist/browser/receivers/sessionReceiver.js +69 -29
- package/dist/browser/receivers/sessionReceiver.js.map +1 -1
- package/dist/browser/sender.js +33 -11
- package/dist/browser/sender.js.map +1 -1
- package/dist/browser/serializers/queueResourceSerializer.js +9 -1
- package/dist/browser/serializers/queueResourceSerializer.js.map +1 -1
- package/dist/browser/serializers/ruleResourceSerializer.js +1 -2
- package/dist/browser/serializers/ruleResourceSerializer.js.map +1 -1
- package/dist/browser/serviceBusAtomManagementClient.js +181 -228
- package/dist/browser/serviceBusAtomManagementClient.js.map +1 -1
- package/dist/browser/serviceBusClient.js +31 -22
- package/dist/browser/serviceBusClient.js.map +1 -1
- package/dist/browser/serviceBusError.js +21 -1
- package/dist/browser/serviceBusError.js.map +1 -1
- package/dist/browser/serviceBusMessage.js +208 -13
- package/dist/browser/serviceBusMessage.js.map +1 -1
- package/dist/browser/serviceBusMessageBatch.js +32 -8
- package/dist/browser/serviceBusMessageBatch.js.map +1 -1
- package/dist/browser/serviceBusRuleManager.js +39 -15
- package/dist/browser/serviceBusRuleManager.js.map +1 -1
- package/dist/browser/session/messageSession.js +130 -25
- package/dist/browser/session/messageSession.js.map +1 -1
- package/dist/browser/util/atomXmlHelper.js +4 -5
- package/dist/browser/util/atomXmlHelper.js.map +1 -1
- package/dist/browser/util/compat/httpHeaders.js +1 -0
- package/dist/browser/util/compat/httpHeaders.js.map +1 -1
- package/dist/browser/util/constants.js +1 -1
- package/dist/browser/util/constants.js.map +1 -1
- package/dist/browser/util/sasServiceClientCredentials.js +8 -0
- package/dist/browser/util/sasServiceClientCredentials.js.map +1 -1
- package/dist/browser/util/semaphore.js +6 -2
- package/dist/browser/util/semaphore.js.map +1 -1
- package/dist/browser/util/utils.js +5 -7
- package/dist/browser/util/utils.js.map +1 -1
- package/dist/commonjs/connectionContext.js +1 -2
- package/dist/commonjs/connectionContext.js.map +1 -1
- package/dist/commonjs/constructorHelpers.js +3 -4
- package/dist/commonjs/constructorHelpers.js.map +1 -1
- package/dist/commonjs/core/autoLockRenewer.js +9 -5
- package/dist/commonjs/core/autoLockRenewer.js.map +1 -1
- package/dist/commonjs/core/batchingReceiver.js +26 -18
- package/dist/commonjs/core/batchingReceiver.js.map +1 -1
- package/dist/commonjs/core/linkEntity.js +74 -13
- package/dist/commonjs/core/linkEntity.js.map +1 -1
- package/dist/commonjs/core/managementClient.js +48 -48
- package/dist/commonjs/core/managementClient.js.map +1 -1
- package/dist/commonjs/core/messageReceiver.js +41 -14
- package/dist/commonjs/core/messageReceiver.js.map +1 -1
- package/dist/commonjs/core/messageSender.js +33 -10
- package/dist/commonjs/core/messageSender.js.map +1 -1
- package/dist/commonjs/core/receiverHelper.js +3 -2
- package/dist/commonjs/core/receiverHelper.js.map +1 -1
- package/dist/commonjs/core/shared.js +11 -4
- package/dist/commonjs/core/shared.js.map +1 -1
- package/dist/commonjs/core/streamingReceiver.js +74 -43
- package/dist/commonjs/core/streamingReceiver.js.map +1 -1
- package/dist/commonjs/diagnostics/instrumentServiceBusMessage.js +16 -8
- package/dist/commonjs/diagnostics/instrumentServiceBusMessage.js.map +1 -1
- package/dist/commonjs/receivers/receiver.js +68 -23
- package/dist/commonjs/receivers/receiver.js.map +1 -1
- package/dist/commonjs/receivers/receiverCommon.js +36 -21
- package/dist/commonjs/receivers/receiverCommon.js.map +1 -1
- package/dist/commonjs/receivers/sessionReceiver.js +69 -29
- package/dist/commonjs/receivers/sessionReceiver.js.map +1 -1
- package/dist/commonjs/sender.js +33 -11
- package/dist/commonjs/sender.js.map +1 -1
- package/dist/commonjs/serializers/queueResourceSerializer.js +9 -1
- package/dist/commonjs/serializers/queueResourceSerializer.js.map +1 -1
- package/dist/commonjs/serializers/ruleResourceSerializer.js +1 -2
- package/dist/commonjs/serializers/ruleResourceSerializer.js.map +1 -1
- package/dist/commonjs/serviceBusAtomManagementClient.js +181 -227
- package/dist/commonjs/serviceBusAtomManagementClient.js.map +1 -1
- package/dist/commonjs/serviceBusClient.js +31 -22
- package/dist/commonjs/serviceBusClient.js.map +1 -1
- package/dist/commonjs/serviceBusError.js +21 -1
- package/dist/commonjs/serviceBusError.js.map +1 -1
- package/dist/commonjs/serviceBusMessage.js +208 -12
- package/dist/commonjs/serviceBusMessage.js.map +1 -1
- package/dist/commonjs/serviceBusMessageBatch.js +32 -8
- package/dist/commonjs/serviceBusMessageBatch.js.map +1 -1
- package/dist/commonjs/serviceBusRuleManager.js +39 -15
- package/dist/commonjs/serviceBusRuleManager.js.map +1 -1
- package/dist/commonjs/session/messageSession.js +130 -25
- package/dist/commonjs/session/messageSession.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +11 -11
- package/dist/commonjs/util/atomXmlHelper.js +4 -5
- package/dist/commonjs/util/atomXmlHelper.js.map +1 -1
- package/dist/commonjs/util/compat/httpHeaders.js +1 -0
- package/dist/commonjs/util/compat/httpHeaders.js.map +1 -1
- package/dist/commonjs/util/constants.js +1 -1
- package/dist/commonjs/util/constants.js.map +1 -1
- package/dist/commonjs/util/runtimeInfo.js +2 -2
- package/dist/commonjs/util/runtimeInfo.js.map +1 -1
- package/dist/commonjs/util/sasServiceClientCredentials.js +8 -0
- package/dist/commonjs/util/sasServiceClientCredentials.js.map +1 -1
- package/dist/commonjs/util/semaphore.js +6 -2
- package/dist/commonjs/util/semaphore.js.map +1 -1
- package/dist/commonjs/util/utils.js +5 -7
- package/dist/commonjs/util/utils.js.map +1 -1
- package/dist/esm/connectionContext.js +1 -2
- package/dist/esm/connectionContext.js.map +1 -1
- package/dist/esm/constructorHelpers.js +3 -4
- package/dist/esm/constructorHelpers.js.map +1 -1
- package/dist/esm/core/autoLockRenewer.js +9 -5
- package/dist/esm/core/autoLockRenewer.js.map +1 -1
- package/dist/esm/core/batchingReceiver.js +26 -18
- package/dist/esm/core/batchingReceiver.js.map +1 -1
- package/dist/esm/core/linkEntity.js +74 -13
- package/dist/esm/core/linkEntity.js.map +1 -1
- package/dist/esm/core/managementClient.js +48 -48
- package/dist/esm/core/managementClient.js.map +1 -1
- package/dist/esm/core/messageReceiver.js +41 -14
- package/dist/esm/core/messageReceiver.js.map +1 -1
- package/dist/esm/core/messageSender.js +33 -10
- package/dist/esm/core/messageSender.js.map +1 -1
- package/dist/esm/core/receiverHelper.js +3 -2
- package/dist/esm/core/receiverHelper.js.map +1 -1
- package/dist/esm/core/shared.js +11 -4
- package/dist/esm/core/shared.js.map +1 -1
- package/dist/esm/core/streamingReceiver.js +74 -43
- package/dist/esm/core/streamingReceiver.js.map +1 -1
- package/dist/esm/diagnostics/instrumentServiceBusMessage.js +16 -8
- package/dist/esm/diagnostics/instrumentServiceBusMessage.js.map +1 -1
- package/dist/esm/receivers/receiver.js +68 -23
- package/dist/esm/receivers/receiver.js.map +1 -1
- package/dist/esm/receivers/receiverCommon.js +36 -21
- package/dist/esm/receivers/receiverCommon.js.map +1 -1
- package/dist/esm/receivers/sessionReceiver.js +69 -29
- package/dist/esm/receivers/sessionReceiver.js.map +1 -1
- package/dist/esm/sender.js +33 -11
- package/dist/esm/sender.js.map +1 -1
- package/dist/esm/serializers/queueResourceSerializer.js +9 -1
- package/dist/esm/serializers/queueResourceSerializer.js.map +1 -1
- package/dist/esm/serializers/ruleResourceSerializer.js +1 -2
- package/dist/esm/serializers/ruleResourceSerializer.js.map +1 -1
- package/dist/esm/serviceBusAtomManagementClient.js +181 -228
- package/dist/esm/serviceBusAtomManagementClient.js.map +1 -1
- package/dist/esm/serviceBusClient.js +31 -22
- package/dist/esm/serviceBusClient.js.map +1 -1
- package/dist/esm/serviceBusError.js +21 -1
- package/dist/esm/serviceBusError.js.map +1 -1
- package/dist/esm/serviceBusMessage.js +208 -13
- package/dist/esm/serviceBusMessage.js.map +1 -1
- package/dist/esm/serviceBusMessageBatch.js +32 -8
- package/dist/esm/serviceBusMessageBatch.js.map +1 -1
- package/dist/esm/serviceBusRuleManager.js +39 -15
- package/dist/esm/serviceBusRuleManager.js.map +1 -1
- package/dist/esm/session/messageSession.js +130 -25
- package/dist/esm/session/messageSession.js.map +1 -1
- package/dist/esm/util/atomXmlHelper.js +4 -5
- package/dist/esm/util/atomXmlHelper.js.map +1 -1
- package/dist/esm/util/compat/httpHeaders.js +1 -0
- package/dist/esm/util/compat/httpHeaders.js.map +1 -1
- package/dist/esm/util/constants.js +1 -1
- package/dist/esm/util/constants.js.map +1 -1
- package/dist/esm/util/runtimeInfo.js +1 -1
- package/dist/esm/util/runtimeInfo.js.map +1 -1
- package/dist/esm/util/sasServiceClientCredentials.js +8 -0
- package/dist/esm/util/sasServiceClientCredentials.js.map +1 -1
- package/dist/esm/util/semaphore.js +6 -2
- package/dist/esm/util/semaphore.js.map +1 -1
- package/dist/esm/util/utils.js +5 -7
- package/dist/esm/util/utils.js.map +1 -1
- package/dist/react-native/connectionContext.js +1 -2
- package/dist/react-native/connectionContext.js.map +1 -1
- package/dist/react-native/constructorHelpers.js +3 -4
- package/dist/react-native/constructorHelpers.js.map +1 -1
- package/dist/react-native/core/autoLockRenewer.js +9 -5
- package/dist/react-native/core/autoLockRenewer.js.map +1 -1
- package/dist/react-native/core/batchingReceiver.js +26 -18
- package/dist/react-native/core/batchingReceiver.js.map +1 -1
- package/dist/react-native/core/linkEntity.js +74 -13
- package/dist/react-native/core/linkEntity.js.map +1 -1
- package/dist/react-native/core/managementClient.js +48 -48
- package/dist/react-native/core/managementClient.js.map +1 -1
- package/dist/react-native/core/messageReceiver.js +41 -14
- package/dist/react-native/core/messageReceiver.js.map +1 -1
- package/dist/react-native/core/messageSender.js +33 -10
- package/dist/react-native/core/messageSender.js.map +1 -1
- package/dist/react-native/core/receiverHelper.js +3 -2
- package/dist/react-native/core/receiverHelper.js.map +1 -1
- package/dist/react-native/core/shared.js +11 -4
- package/dist/react-native/core/shared.js.map +1 -1
- package/dist/react-native/core/streamingReceiver.js +74 -43
- package/dist/react-native/core/streamingReceiver.js.map +1 -1
- package/dist/react-native/diagnostics/instrumentServiceBusMessage.js +16 -8
- package/dist/react-native/diagnostics/instrumentServiceBusMessage.js.map +1 -1
- package/dist/react-native/receivers/receiver.js +68 -23
- package/dist/react-native/receivers/receiver.js.map +1 -1
- package/dist/react-native/receivers/receiverCommon.js +36 -21
- package/dist/react-native/receivers/receiverCommon.js.map +1 -1
- package/dist/react-native/receivers/sessionReceiver.js +69 -29
- package/dist/react-native/receivers/sessionReceiver.js.map +1 -1
- package/dist/react-native/sender.js +33 -11
- package/dist/react-native/sender.js.map +1 -1
- package/dist/react-native/serializers/queueResourceSerializer.js +9 -1
- package/dist/react-native/serializers/queueResourceSerializer.js.map +1 -1
- package/dist/react-native/serializers/ruleResourceSerializer.js +1 -2
- package/dist/react-native/serializers/ruleResourceSerializer.js.map +1 -1
- package/dist/react-native/serviceBusAtomManagementClient.js +181 -228
- package/dist/react-native/serviceBusAtomManagementClient.js.map +1 -1
- package/dist/react-native/serviceBusClient.js +31 -22
- package/dist/react-native/serviceBusClient.js.map +1 -1
- package/dist/react-native/serviceBusError.js +21 -1
- package/dist/react-native/serviceBusError.js.map +1 -1
- package/dist/react-native/serviceBusMessage.js +208 -13
- package/dist/react-native/serviceBusMessage.js.map +1 -1
- package/dist/react-native/serviceBusMessageBatch.js +32 -8
- package/dist/react-native/serviceBusMessageBatch.js.map +1 -1
- package/dist/react-native/serviceBusRuleManager.js +39 -15
- package/dist/react-native/serviceBusRuleManager.js.map +1 -1
- package/dist/react-native/session/messageSession.js +130 -25
- package/dist/react-native/session/messageSession.js.map +1 -1
- package/dist/react-native/util/atomXmlHelper.js +4 -5
- package/dist/react-native/util/atomXmlHelper.js.map +1 -1
- package/dist/react-native/util/compat/httpHeaders.js +1 -0
- package/dist/react-native/util/compat/httpHeaders.js.map +1 -1
- package/dist/react-native/util/constants.js +1 -1
- package/dist/react-native/util/constants.js.map +1 -1
- package/dist/react-native/util/sasServiceClientCredentials.js +8 -0
- package/dist/react-native/util/sasServiceClientCredentials.js.map +1 -1
- package/dist/react-native/util/semaphore.js +6 -2
- package/dist/react-native/util/semaphore.js.map +1 -1
- package/dist/react-native/util/utils.js +5 -7
- package/dist/react-native/util/utils.js.map +1 -1
- package/package.json +38 -38
|
@@ -20,6 +20,67 @@ const tracing_js_1 = require("../diagnostics/tracing.js");
|
|
|
20
20
|
* by providing handler functions.
|
|
21
21
|
*/
|
|
22
22
|
class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
23
|
+
/**
|
|
24
|
+
* The maximum number of messages that should be
|
|
25
|
+
* processed concurrently while in streaming mode. Once this limit has been reached, more
|
|
26
|
+
* messages will not be received until the user's message handler has completed processing current message.
|
|
27
|
+
* Default: 1
|
|
28
|
+
*/
|
|
29
|
+
maxConcurrentCalls = 1;
|
|
30
|
+
/**
|
|
31
|
+
* Indicates whether the receiver is already actively
|
|
32
|
+
* running `onDetached`.
|
|
33
|
+
* This is expected to be true while the receiver attempts
|
|
34
|
+
* to bring its link back up due to a retryable issue.
|
|
35
|
+
*/
|
|
36
|
+
_isDetaching = false;
|
|
37
|
+
/**
|
|
38
|
+
*Retry policy options that determine the mode, number of retries, retry interval etc.
|
|
39
|
+
*/
|
|
40
|
+
_retryOptions;
|
|
41
|
+
_receiverHelper;
|
|
42
|
+
/**
|
|
43
|
+
* The user's message handlers, wrapped so any thrown exceptions are properly logged
|
|
44
|
+
* or forwarded to the user's processError handler.
|
|
45
|
+
*/
|
|
46
|
+
_messageHandlers = () => {
|
|
47
|
+
throw new Error("messageHandlers are not set.");
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The subscribe(options) passed when the subscribe call originally happened. Stored
|
|
51
|
+
* so _subscribeImpl() can re-use them later if we have to restart our subscription
|
|
52
|
+
* when detach/reattaching.
|
|
53
|
+
*/
|
|
54
|
+
_subscribeOptions;
|
|
55
|
+
/**
|
|
56
|
+
* Used so we can stub out retry in tests.
|
|
57
|
+
*/
|
|
58
|
+
_retryForeverFn = receiverCommon_js_1.retryForever;
|
|
59
|
+
/**
|
|
60
|
+
* The message handler that will be set as the handler on the
|
|
61
|
+
* underlying rhea receiver for the "receiver_close" event.
|
|
62
|
+
*/
|
|
63
|
+
_onAmqpClose;
|
|
64
|
+
/**
|
|
65
|
+
* The message handler that will be set as the handler on
|
|
66
|
+
* the underlying rhea receiver's session for the "session_close" event.
|
|
67
|
+
*/
|
|
68
|
+
_onSessionClose;
|
|
69
|
+
/**
|
|
70
|
+
* The message handler that will be set as the handler on
|
|
71
|
+
* the underlying rhea receiver's session for the "session_error" event.
|
|
72
|
+
*/
|
|
73
|
+
_onSessionError;
|
|
74
|
+
/**
|
|
75
|
+
* The message handler that will be set as the handler on the
|
|
76
|
+
* underlying rhea receiver for the "receiver_error" event.
|
|
77
|
+
*/
|
|
78
|
+
_onAmqpError;
|
|
79
|
+
/**
|
|
80
|
+
* The message handler that will be set as the handler on the
|
|
81
|
+
* underlying rhea receiver for the "message" event.
|
|
82
|
+
*/
|
|
83
|
+
_onAmqpMessage;
|
|
23
84
|
/**
|
|
24
85
|
* Whether we are currently subscribed (or subscribing) for receiving messages.
|
|
25
86
|
* (this is irrespective of receiver state, etc... - it's just a simple flag to prevent
|
|
@@ -37,45 +98,19 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
37
98
|
*/
|
|
38
99
|
constructor(identifier, connectionContext, entityPath, options) {
|
|
39
100
|
super(identifier, connectionContext, entityPath, "streaming", options);
|
|
40
|
-
|
|
41
|
-
* The maximum number of messages that should be
|
|
42
|
-
* processed concurrently while in streaming mode. Once this limit has been reached, more
|
|
43
|
-
* messages will not be received until the user's message handler has completed processing current message.
|
|
44
|
-
* Default: 1
|
|
45
|
-
*/
|
|
46
|
-
this.maxConcurrentCalls = 1;
|
|
47
|
-
/**
|
|
48
|
-
* Indicates whether the receiver is already actively
|
|
49
|
-
* running `onDetached`.
|
|
50
|
-
* This is expected to be true while the receiver attempts
|
|
51
|
-
* to bring its link back up due to a retryable issue.
|
|
52
|
-
*/
|
|
53
|
-
this._isDetaching = false;
|
|
54
|
-
/**
|
|
55
|
-
* The user's message handlers, wrapped so any thrown exceptions are properly logged
|
|
56
|
-
* or forwarded to the user's processError handler.
|
|
57
|
-
*/
|
|
58
|
-
this._messageHandlers = () => {
|
|
59
|
-
throw new Error("messageHandlers are not set.");
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Used so we can stub out retry in tests.
|
|
63
|
-
*/
|
|
64
|
-
this._retryForeverFn = receiverCommon_js_1.retryForever;
|
|
65
|
-
if (typeof (options === null || options === void 0 ? void 0 : options.maxConcurrentCalls) === "number" && (options === null || options === void 0 ? void 0 : options.maxConcurrentCalls) > 0) {
|
|
101
|
+
if (typeof options?.maxConcurrentCalls === "number" && options?.maxConcurrentCalls > 0) {
|
|
66
102
|
this.maxConcurrentCalls = options.maxConcurrentCalls;
|
|
67
103
|
}
|
|
68
|
-
this._retryOptions =
|
|
104
|
+
this._retryOptions = options?.retryOptions || {};
|
|
69
105
|
this._receiverHelper = new receiverHelper_js_1.ReceiverHelper(() => ({
|
|
70
106
|
receiver: this.link,
|
|
71
107
|
logPrefix: this.logPrefix,
|
|
72
108
|
}));
|
|
73
109
|
this._onAmqpClose = async (context) => {
|
|
74
|
-
var _a;
|
|
75
110
|
const receiverError = context.receiver && context.receiver.error;
|
|
76
111
|
const receiver = this.link || context.receiver;
|
|
77
112
|
log_js_1.receiverLogger.logError(receiverError, `${this.logPrefix} 'receiver_close' event occurred. The associated error is`);
|
|
78
|
-
|
|
113
|
+
this._lockRenewer?.stopAll(this);
|
|
79
114
|
if (receiver && !receiver.isItselfClosed()) {
|
|
80
115
|
await this.onDetached(receiverError);
|
|
81
116
|
}
|
|
@@ -86,11 +121,10 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
86
121
|
}
|
|
87
122
|
};
|
|
88
123
|
this._onSessionClose = async (context) => {
|
|
89
|
-
var _a;
|
|
90
124
|
const receiver = this.link || context.receiver;
|
|
91
125
|
const sessionError = context.session && context.session.error;
|
|
92
126
|
log_js_1.receiverLogger.logError(sessionError, `${this.logPrefix} 'session_close' event occurred. The associated error is`);
|
|
93
|
-
|
|
127
|
+
this._lockRenewer?.stopAll(this);
|
|
94
128
|
if (receiver && !receiver.isSessionItselfClosed()) {
|
|
95
129
|
await this.onDetached(sessionError);
|
|
96
130
|
}
|
|
@@ -129,7 +163,6 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
129
163
|
}
|
|
130
164
|
};
|
|
131
165
|
this._onAmqpMessage = async (context) => {
|
|
132
|
-
var _a, _b, _c, _d;
|
|
133
166
|
// If the receiver got closed in PeekLock mode, avoid processing the message as we
|
|
134
167
|
// cannot settle the message.
|
|
135
168
|
if (this.receiveMode === "peekLock" && (!this.link || !this.link.isOpen())) {
|
|
@@ -137,8 +170,8 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
137
170
|
"as the receiver is closed", this.logPrefix);
|
|
138
171
|
return;
|
|
139
172
|
}
|
|
140
|
-
const bMessage = new serviceBusMessage_js_1.ServiceBusMessageImpl(context.message, context.delivery, true, this.receiveMode,
|
|
141
|
-
|
|
173
|
+
const bMessage = new serviceBusMessage_js_1.ServiceBusMessageImpl(context.message, context.delivery, true, this.receiveMode, options.skipParsingBodyAsJson ?? false, options.skipConvertingDate ?? false);
|
|
174
|
+
this._lockRenewer?.start(this, bMessage, (err) => {
|
|
142
175
|
this._messageHandlers().processError({
|
|
143
176
|
error: err,
|
|
144
177
|
errorSource: "renewLock",
|
|
@@ -155,7 +188,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
155
188
|
"with id '%s' on the receiver '%s'", this.logPrefix, bMessage.messageId, this.name);
|
|
156
189
|
// Do not want renewLock to happen unnecessarily, while abandoning the message. Hence,
|
|
157
190
|
// doing this here. Otherwise, this should be done in finally.
|
|
158
|
-
|
|
191
|
+
this._lockRenewer?.stop(this, bMessage);
|
|
159
192
|
const error = (0, serviceBusError_js_1.translateServiceBusError)(err);
|
|
160
193
|
// Nothing much to do if user's message handler throws. Let us try abandoning the message.
|
|
161
194
|
if (!bMessage.delivery.remote_settled &&
|
|
@@ -253,6 +286,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
253
286
|
await this._receiverHelper.suspend();
|
|
254
287
|
return super.close();
|
|
255
288
|
}
|
|
289
|
+
_subscribeCallPromise;
|
|
256
290
|
/**
|
|
257
291
|
* Starts the receiver by establishing an AMQP session and an AMQP receiver link on the session.
|
|
258
292
|
*
|
|
@@ -293,7 +327,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
293
327
|
throw err;
|
|
294
328
|
}
|
|
295
329
|
finally {
|
|
296
|
-
promiseResolve
|
|
330
|
+
promiseResolve?.();
|
|
297
331
|
this._subscribeCallPromise = undefined;
|
|
298
332
|
}
|
|
299
333
|
}
|
|
@@ -305,7 +339,6 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
305
339
|
* @param operationOptions - The subscribe(options)
|
|
306
340
|
*/
|
|
307
341
|
_setMessageHandlers(userHandlers, operationOptions) {
|
|
308
|
-
var _a;
|
|
309
342
|
const messageHandlers = {
|
|
310
343
|
processError: async (args) => {
|
|
311
344
|
try {
|
|
@@ -319,7 +352,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
319
352
|
},
|
|
320
353
|
processMessage: async (message) => {
|
|
321
354
|
try {
|
|
322
|
-
await tracing_js_1.tracingClient.withSpan("StreamReceiver.process", operationOptions
|
|
355
|
+
await tracing_js_1.tracingClient.withSpan("StreamReceiver.process", operationOptions ?? {}, () => userHandlers.processMessage(message), (0, instrumentServiceBusMessage_js_1.toProcessingSpanOptions)(message, this, this._context.config, "process"));
|
|
323
356
|
}
|
|
324
357
|
catch (err) {
|
|
325
358
|
this._messageHandlers().processError({
|
|
@@ -356,7 +389,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
356
389
|
identifier: this.identifier,
|
|
357
390
|
}));
|
|
358
391
|
},
|
|
359
|
-
forwardInternalErrors:
|
|
392
|
+
forwardInternalErrors: userHandlers.forwardInternalErrors ?? false,
|
|
360
393
|
};
|
|
361
394
|
this._messageHandlers = () => messageHandlers;
|
|
362
395
|
}
|
|
@@ -366,7 +399,6 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
366
399
|
* @returns A promise that will resolve when a link is created and we successfully add credits to it.
|
|
367
400
|
*/
|
|
368
401
|
async _subscribeImpl(caller) {
|
|
369
|
-
var _a;
|
|
370
402
|
try {
|
|
371
403
|
// we don't expect to ever get an error from retryForever but bugs
|
|
372
404
|
// do happen.
|
|
@@ -374,7 +406,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
374
406
|
retryConfig: {
|
|
375
407
|
connectionId: this._context.connection.id,
|
|
376
408
|
operationType: core_amqp_1.RetryOperationType.receiverLink,
|
|
377
|
-
abortSignal:
|
|
409
|
+
abortSignal: this._subscribeOptions?.abortSignal,
|
|
378
410
|
retryOptions: this._retryOptions,
|
|
379
411
|
operation: () => this._initAndAddCreditOperation(caller),
|
|
380
412
|
},
|
|
@@ -407,7 +439,6 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
407
439
|
* @param catchAndReportError - A function and reports an error but does not throw it.
|
|
408
440
|
*/
|
|
409
441
|
async _initAndAddCreditOperation(caller) {
|
|
410
|
-
var _a;
|
|
411
442
|
if (this._receiverHelper.isSuspended()) {
|
|
412
443
|
// user has suspended us while we were initializing
|
|
413
444
|
// the connection. Abort this attempt - if they attempt
|
|
@@ -422,7 +453,7 @@ class StreamingReceiver extends messageReceiver_js_1.MessageReceiver {
|
|
|
422
453
|
// Need to check again as user can suspend us in preInitialize()
|
|
423
454
|
throw new abort_controller_1.AbortError("Receiver was suspended during initialization.");
|
|
424
455
|
}
|
|
425
|
-
await this._init(this._createReceiverOptions(caller === "detach", this._getHandlers()),
|
|
456
|
+
await this._init(this._createReceiverOptions(caller === "detach", this._getHandlers()), this._subscribeOptions?.abortSignal);
|
|
426
457
|
try {
|
|
427
458
|
await this._messageHandlers().postInitialize();
|
|
428
459
|
this._receiverHelper.addCredit(this.maxConcurrentCalls);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamingReceiver.js","sourceRoot":"","sources":["../../../src/core/streamingReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { OnAmqpEventAsPromise, ReceiveOptions } from \"./messageReceiver.js\";\nimport { MessageReceiver } from \"./messageReceiver.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\n\nimport { ReceiverHelper } from \"./receiverHelper.js\";\n\nimport { throwErrorIfConnectionClosed } from \"../util/errors.js\";\nimport type { MessagingError, RetryOptions } from \"@azure/core-amqp\";\nimport { RetryOperationType, ConditionErrorNameMapper } from \"@azure/core-amqp\";\nimport type { OperationOptionsBase } from \"../modelsToBeSharedWithEventHubs.js\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport type { AmqpError, EventContext, OnAmqpEvent } from \"rhea-promise\";\nimport { ServiceBusMessageImpl } from \"../serviceBusMessage.js\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\nimport { abandonMessage, completeMessage, retryForever } from \"../receivers/receiverCommon.js\";\nimport type { ReceiverHandlers } from \"./shared.js\";\nimport type {\n InternalMessageHandlers,\n InternalProcessErrorArgs,\n MessageHandlers,\n ProcessErrorArgs,\n SubscribeOptions,\n} from \"../models.js\";\nimport { toProcessingSpanOptions } from \"../diagnostics/instrumentServiceBusMessage.js\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { tracingClient } from \"../diagnostics/tracing.js\";\n\n/**\n * @internal\n */\nexport interface StreamingReceiverInitArgs\n extends ReceiveOptions,\n Pick<OperationOptionsBase, \"abortSignal\"> {\n messageHandlers: MessageHandlers;\n}\n\n/**\n * @internal\n * Describes the streaming receiver where the user can receive the message\n * by providing handler functions.\n */\nexport class StreamingReceiver extends MessageReceiver {\n /**\n * The maximum number of messages that should be\n * processed concurrently while in streaming mode. Once this limit has been reached, more\n * messages will not be received until the user's message handler has completed processing current message.\n * Default: 1\n */\n maxConcurrentCalls: number = 1;\n\n /**\n * Indicates whether the receiver is already actively\n * running `onDetached`.\n * This is expected to be true while the receiver attempts\n * to bring its link back up due to a retryable issue.\n */\n private _isDetaching: boolean = false;\n /**\n *Retry policy options that determine the mode, number of retries, retry interval etc.\n */\n private _retryOptions: RetryOptions;\n\n private _receiverHelper: ReceiverHelper;\n\n /**\n * The user's message handlers, wrapped so any thrown exceptions are properly logged\n * or forwarded to the user's processError handler.\n */\n private _messageHandlers: () => Required<InternalMessageHandlers> = () => {\n throw new Error(\"messageHandlers are not set.\");\n };\n\n /**\n * The subscribe(options) passed when the subscribe call originally happened. Stored\n * so _subscribeImpl() can re-use them later if we have to restart our subscription\n * when detach/reattaching.\n */\n private _subscribeOptions: SubscribeOptions | undefined;\n\n /**\n * Used so we can stub out retry in tests.\n */\n private _retryForeverFn: typeof retryForever = retryForever;\n\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"receiver_close\" event.\n */\n private _onAmqpClose: OnAmqpEventAsPromise;\n\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea receiver's session for the \"session_close\" event.\n */\n private _onSessionClose: OnAmqpEventAsPromise;\n\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea receiver's session for the \"session_error\" event.\n */\n private _onSessionError: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"receiver_error\" event.\n */\n private _onAmqpError: OnAmqpEvent;\n\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"message\" event.\n */\n protected _onAmqpMessage: OnAmqpEventAsPromise;\n\n /**\n * Whether we are currently subscribed (or subscribing) for receiving messages.\n * (this is irrespective of receiver state, etc... - it's just a simple flag to prevent\n * multiple subscribe() calls from happening on this instance)\n */\n public get isSubscribeActive(): boolean {\n return !this._receiverHelper.isSuspended();\n }\n\n /**\n * Instantiate a new Streaming receiver for receiving messages with handlers.\n *\n * @param identifier - the name used to identifier the receiver\n * @param connectionContext - The client entity context.\n * @param options - Options for how you'd like to connect.\n */\n constructor(\n identifier: string,\n connectionContext: ConnectionContext,\n entityPath: string,\n options: ReceiveOptions,\n ) {\n super(identifier, connectionContext, entityPath, \"streaming\", options);\n\n if (typeof options?.maxConcurrentCalls === \"number\" && options?.maxConcurrentCalls > 0) {\n this.maxConcurrentCalls = options.maxConcurrentCalls;\n }\n\n this._retryOptions = options?.retryOptions || {};\n\n this._receiverHelper = new ReceiverHelper(() => ({\n receiver: this.link,\n logPrefix: this.logPrefix,\n }));\n\n this._onAmqpClose = async (context: EventContext) => {\n const receiverError = context.receiver && context.receiver.error;\n const receiver = this.link || context.receiver!;\n\n logger.logError(\n receiverError,\n `${this.logPrefix} 'receiver_close' event occurred. The associated error is`,\n );\n\n this._lockRenewer?.stopAll(this);\n\n if (receiver && !receiver.isItselfClosed()) {\n await this.onDetached(receiverError);\n } else {\n logger.verbose(\n \"%s 'receiver_close' event occurred on the receiver '%s' with address '%s' \" +\n \"because the sdk initiated it. Hence not calling detached from the _onAmqpClose\" +\n \"() handler.\",\n this.logPrefix,\n this.name,\n this.address,\n );\n }\n };\n\n this._onSessionClose = async (context: EventContext) => {\n const receiver = this.link || context.receiver!;\n const sessionError = context.session && context.session.error;\n\n logger.logError(\n sessionError,\n `${this.logPrefix} 'session_close' event occurred. The associated error is`,\n );\n\n this._lockRenewer?.stopAll(this);\n\n if (receiver && !receiver.isSessionItselfClosed()) {\n await this.onDetached(sessionError);\n } else {\n logger.verbose(\n \"%s 'session_close' event occurred on the session of receiver '%s' with address \" +\n \"'%s' because the sdk initiated it. Hence not calling detached from the _onSessionClose\" +\n \"() handler.\",\n this.logPrefix,\n this.name,\n this.address,\n );\n }\n };\n\n this._onAmqpError = (context: EventContext) => {\n const receiverError = context.receiver && context.receiver.error;\n if (receiverError) {\n const sbError = translateServiceBusError(receiverError) as MessagingError;\n logger.logError(\n sbError,\n `${this.logPrefix} 'receiver_error' event occurred. The associated error is`,\n );\n this._messageHandlers().processError({\n error: sbError,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n };\n\n this._onSessionError = (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n if (sessionError) {\n const sbError = translateServiceBusError(sessionError) as MessagingError;\n logger.logError(\n sbError,\n `${this.logPrefix} 'session_error' event occurred. The associated error is`,\n );\n this._messageHandlers().processError({\n error: sbError,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n };\n\n this._onAmqpMessage = async (context: EventContext) => {\n // If the receiver got closed in PeekLock mode, avoid processing the message as we\n // cannot settle the message.\n if (this.receiveMode === \"peekLock\" && (!this.link || !this.link.isOpen())) {\n logger.verbose(\n \"%s Not calling the user's message handler for the current message \" +\n \"as the receiver is closed\",\n this.logPrefix,\n );\n return;\n }\n\n const bMessage: ServiceBusMessageImpl = new ServiceBusMessageImpl(\n context.message!,\n context.delivery!,\n true,\n this.receiveMode,\n options.skipParsingBodyAsJson ?? false,\n options.skipConvertingDate ?? false,\n );\n\n this._lockRenewer?.start(this, bMessage, (err) => {\n this._messageHandlers().processError({\n error: err,\n errorSource: \"renewLock\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n });\n\n try {\n await this._messageHandlers().processMessage(bMessage);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s An error occurred while running user's message handler for the message \" +\n \"with id '%s' on the receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n\n // Do not want renewLock to happen unnecessarily, while abandoning the message. Hence,\n // doing this here. Otherwise, this should be done in finally.\n this._lockRenewer?.stop(this, bMessage);\n const error = translateServiceBusError(err) as MessagingError;\n // Nothing much to do if user's message handler throws. Let us try abandoning the message.\n if (\n !bMessage.delivery.remote_settled &&\n error.code !== ConditionErrorNameMapper[\"com.microsoft:message-lock-lost\"] &&\n this.receiveMode === \"peekLock\" &&\n this.isOpen() // only try to abandon the messages if the connection is still open\n ) {\n try {\n logger.logError(\n error,\n \"%s Abandoning the message with id '%s' on the receiver '%s' since \" +\n \"an error occured: %O.\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n error,\n );\n await abandonMessage(\n bMessage,\n this._context,\n entityPath,\n undefined,\n this._retryOptions,\n );\n } catch (abandonError: any) {\n const translatedError = translateServiceBusError(abandonError);\n logger.logError(\n translatedError,\n \"%s An error occurred while abandoning the message with id '%s' on the \" +\n \"receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n this._messageHandlers().processError({\n error: translatedError,\n errorSource: \"abandon\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n }\n return;\n } finally {\n try {\n this._receiverHelper.addCredit(1);\n } catch (err: any) {\n // if we're aborting out of the receive operation we don't need to report it (the user already\n // knows the link is being torn down or stopped)\n if (err.name !== \"AbortError\") {\n logger.logError(\n err,\n `[${this.logPrefix}] Failed to add credit after receiving message`,\n );\n await this._reportInternalError(err);\n }\n }\n }\n\n // If we've made it this far, then user's message handler completed fine. Let us try\n // completing the message.\n if (\n this.autoComplete &&\n this.receiveMode === \"peekLock\" &&\n !bMessage.delivery.remote_settled\n ) {\n try {\n logger.verbose(\n \"%s Auto completing the message with id '%s' on \" + \"the receiver.\",\n this.logPrefix,\n bMessage.messageId,\n );\n await completeMessage(bMessage, this._context, entityPath, this._retryOptions);\n } catch (completeError: any) {\n const translatedError = translateServiceBusError(completeError);\n logger.logError(\n translatedError,\n \"%s An error occurred while completing the message with id '%s' on the \" +\n \"receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n this._messageHandlers().processError({\n error: translatedError,\n errorSource: \"complete\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n }\n };\n }\n\n private _reportInternalError(error: Error): Promise<void> {\n const messageHandlers = this._messageHandlers();\n\n if (messageHandlers.forwardInternalErrors) {\n const errorArgs: InternalProcessErrorArgs = {\n error,\n entityPath: this.entityPath,\n errorSource: \"internal\",\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n };\n\n return messageHandlers.processError(errorArgs as ProcessErrorArgs);\n }\n\n return Promise.resolve();\n }\n\n private _getHandlers(): ReceiverHandlers {\n return {\n onMessage: (context: EventContext) =>\n this._onAmqpMessage(context).catch((err) => this._reportInternalError(err)),\n onClose: (context: EventContext) =>\n this._onAmqpClose(context).catch((err) => this._reportInternalError(err)),\n onSessionClose: (context: EventContext) =>\n this._onSessionClose(context).catch((err) => this._reportInternalError(err)),\n onError: this._onAmqpError,\n onSessionError: this._onSessionError,\n };\n }\n\n async stopReceivingMessages(): Promise<void> {\n await this._receiverHelper.suspend();\n\n if (this._subscribeCallPromise) {\n await this._subscribeCallPromise;\n }\n }\n\n async close(): Promise<void> {\n await this._receiverHelper.suspend();\n return super.close();\n }\n\n private _subscribeCallPromise: Promise<void> | undefined;\n\n /**\n * Starts the receiver by establishing an AMQP session and an AMQP receiver link on the session.\n *\n * Any errors thrown by this function will also be sent to the messageHandlers.processError function\n * _and_ thrown, ultimately from this method.\n *\n * NOTE: This function retries _infinitely_ until success! It is completely up to the user to break\n * out of this retry cycle otherwise by:\n * 1. closing the receiver\n * 2. Calling `close` on the subscription instance they received when they initially called subscribe().\n * 3. aborting the abortSignal they passed in when calling subscribe (this also applies to initialization calls in onDetach)\n *\n * @param onMessage - The message handler to receive servicebus messages.\n * @param onError - The error handler to receive an error that occurs while receivin messages.\n */\n async subscribe(\n messageHandlers: InternalMessageHandlers,\n subscribeOptions: SubscribeOptions | undefined,\n ): Promise<void> {\n // these options and message handlers will be re-used if/when onDetach is called.\n this._subscribeOptions = subscribeOptions;\n this._setMessageHandlers(messageHandlers, subscribeOptions);\n\n let promiseResolve: (() => void) | undefined;\n this._subscribeCallPromise = new Promise((resolve) => {\n promiseResolve = resolve;\n });\n\n try {\n this._receiverHelper.resume();\n return await this._subscribeImpl(\"subscribe\");\n } catch (err: any) {\n // callers aren't going to be in a good position to forward this error properly\n // so we do it here.\n await this._messageHandlers().processError({\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n errorSource: \"receive\",\n error: err,\n identifier: this.identifier,\n });\n\n throw err;\n } finally {\n promiseResolve?.();\n this._subscribeCallPromise = undefined;\n }\n }\n\n /**\n * Wraps the individual message handlers with tracing and proper error handling\n * and assigns them to `this._messageHandlers`\n *\n * @param userHandlers - The user's message handlers\n * @param operationOptions - The subscribe(options)\n */\n private _setMessageHandlers(\n userHandlers: InternalMessageHandlers,\n operationOptions: OperationOptionsBase | undefined,\n ): void {\n const messageHandlers = {\n processError: async (args: ProcessErrorArgs) => {\n try {\n args.error = translateServiceBusError(args.error);\n await userHandlers.processError(args);\n } catch (err: any) {\n await this._reportInternalError(err);\n logger.logError(err, `An error was thrown from the user's processError handler`);\n }\n },\n processMessage: async (message: ServiceBusMessageImpl) => {\n try {\n await tracingClient.withSpan(\n \"StreamReceiver.process\",\n operationOptions ?? {},\n () => userHandlers.processMessage(message),\n toProcessingSpanOptions(message, this, this._context.config, \"process\"),\n );\n } catch (err: any) {\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n });\n throw err;\n }\n },\n postInitialize: async () => {\n if (!userHandlers.postInitialize) {\n return;\n }\n\n return userHandlers.postInitialize().catch((err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n );\n },\n preInitialize: async () => {\n if (!userHandlers.preInitialize) {\n return;\n }\n\n return userHandlers.preInitialize().catch((err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n );\n },\n forwardInternalErrors: userHandlers.forwardInternalErrors ?? false,\n };\n\n this._messageHandlers = () => messageHandlers;\n }\n\n /**\n * Subscribes using the already assigned `this._messageHandlers` and `this._subscribeOptions`\n *\n * @returns A promise that will resolve when a link is created and we successfully add credits to it.\n */\n private async _subscribeImpl(caller: \"detach\" | \"subscribe\"): Promise<void> {\n try {\n // we don't expect to ever get an error from retryForever but bugs\n // do happen.\n return await this._retryForeverFn({\n retryConfig: {\n connectionId: this._context.connection.id,\n operationType: RetryOperationType.receiverLink,\n abortSignal: this._subscribeOptions?.abortSignal,\n retryOptions: this._retryOptions,\n operation: () => this._initAndAddCreditOperation(caller),\n },\n onError: (err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n logPrefix: this.logPrefix,\n logger,\n });\n } catch (err: any) {\n try {\n await this._receiverHelper.suspend();\n } catch (error: any) {\n logger.logError(error, `${this.logPrefix} receiver.suspend threw an error`);\n }\n\n throw err;\n }\n }\n\n /**\n * Initializes the link and adds credits. If any of these operations fail any created link will\n * be closed.\n *\n * @param caller - The caller which dictates whether or not we create a new name for our created link.\n * @param catchAndReportError - A function and reports an error but does not throw it.\n */\n private async _initAndAddCreditOperation(caller: \"detach\" | \"subscribe\"): Promise<void> {\n if (this._receiverHelper.isSuspended()) {\n // user has suspended us while we were initializing\n // the connection. Abort this attempt - if they attempt\n // resubscribe we'll just reinitialize.\n // This checks should happen before throwErrorIfConnectionClosed(); otherwise\n // we won't be able to break out of the retry-for-ever loops when user suspend us.\n throw new AbortError(\"Receiver was suspended during initialization.\");\n }\n\n throwErrorIfConnectionClosed(this._context);\n\n await this._messageHandlers().preInitialize();\n\n if (this._receiverHelper.isSuspended()) {\n // Need to check again as user can suspend us in preInitialize()\n throw new AbortError(\"Receiver was suspended during initialization.\");\n }\n await this._init(\n this._createReceiverOptions(caller === \"detach\", this._getHandlers()),\n this._subscribeOptions?.abortSignal,\n );\n\n try {\n await this._messageHandlers().postInitialize();\n this._receiverHelper.addCredit(this.maxConcurrentCalls);\n } catch (err: any) {\n try {\n await this.closeLink();\n } catch (error: any) {\n await this._messageHandlers().processError({\n error,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n });\n }\n throw err;\n }\n }\n\n /**\n * Will reconnect the receiver link if necessary.\n * @param receiverError - The receiver error or connection error, if any.\n */\n async onDetached(receiverError?: AmqpError | Error): Promise<void> {\n try {\n logger.verbose(`${this.logPrefix} onDetached: reinitializing link.`);\n\n // User explicitly called `close` on the receiver, so link is already closed\n // and we can exit early.\n if (this.wasClosedPermanently) {\n logger.verbose(\n `${this.logPrefix} onDetached: link has been closed permanently, not reinitializing. `,\n );\n return;\n }\n\n // Prevent multiple onDetached invocations from running concurrently.\n if (this._isDetaching) {\n // This can happen when the network connection goes down for some amount of time.\n // The first connection `disconnect` will trigger `onDetached` and attempt to retry\n // creating the connection/receiver link.\n // While those retry attempts fail (until the network connection comes back up),\n // we'll continue to see connection `disconnect` errors.\n // These should be ignored until the already running `onDetached` completes\n // its retry attempts or errors.\n logger.verbose(\n `${this.logPrefix} onDetached: Call to detached on streaming receiver '${this.name}' is already in progress.`,\n );\n return;\n }\n\n this._isDetaching = true;\n\n const translatedError = receiverError\n ? translateServiceBusError(receiverError)\n : receiverError;\n logger.logError(\n translatedError,\n `${this.logPrefix} onDetached: Reinitializing receiver because of error`,\n );\n\n // Clears the token renewal timer. Closes the link and its session if they are open.\n // Removes the link and its session if they are present in rhea's cache.\n await this.closeLink();\n } catch (err: any) {\n logger.verbose(\n `${this.logPrefix} onDetached: Encountered an error when closing the previous link: `,\n err,\n );\n }\n\n try {\n await this._subscribeImpl(\"detach\");\n } finally {\n this._isDetaching = false;\n }\n }\n\n protected removeLinkFromContext(): void {\n delete this._context.messageReceivers[this.name];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"streamingReceiver.js","sourceRoot":"","sources":["../../../src/core/streamingReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { OnAmqpEventAsPromise, ReceiveOptions } from \"./messageReceiver.js\";\nimport { MessageReceiver } from \"./messageReceiver.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\n\nimport { ReceiverHelper } from \"./receiverHelper.js\";\n\nimport { throwErrorIfConnectionClosed } from \"../util/errors.js\";\nimport type { MessagingError, RetryOptions } from \"@azure/core-amqp\";\nimport { RetryOperationType, ConditionErrorNameMapper } from \"@azure/core-amqp\";\nimport type { OperationOptionsBase } from \"../modelsToBeSharedWithEventHubs.js\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport type { AmqpError, EventContext, OnAmqpEvent } from \"rhea-promise\";\nimport { ServiceBusMessageImpl } from \"../serviceBusMessage.js\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\nimport { abandonMessage, completeMessage, retryForever } from \"../receivers/receiverCommon.js\";\nimport type { ReceiverHandlers } from \"./shared.js\";\nimport type {\n InternalMessageHandlers,\n InternalProcessErrorArgs,\n MessageHandlers,\n ProcessErrorArgs,\n SubscribeOptions,\n} from \"../models.js\";\nimport { toProcessingSpanOptions } from \"../diagnostics/instrumentServiceBusMessage.js\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { tracingClient } from \"../diagnostics/tracing.js\";\n\n/**\n * @internal\n */\nexport interface StreamingReceiverInitArgs\n extends ReceiveOptions,\n Pick<OperationOptionsBase, \"abortSignal\"> {\n messageHandlers: MessageHandlers;\n}\n\n/**\n * @internal\n * Describes the streaming receiver where the user can receive the message\n * by providing handler functions.\n */\nexport class StreamingReceiver extends MessageReceiver {\n /**\n * The maximum number of messages that should be\n * processed concurrently while in streaming mode. Once this limit has been reached, more\n * messages will not be received until the user's message handler has completed processing current message.\n * Default: 1\n */\n maxConcurrentCalls: number = 1;\n\n /**\n * Indicates whether the receiver is already actively\n * running `onDetached`.\n * This is expected to be true while the receiver attempts\n * to bring its link back up due to a retryable issue.\n */\n private _isDetaching: boolean = false;\n /**\n *Retry policy options that determine the mode, number of retries, retry interval etc.\n */\n private _retryOptions: RetryOptions;\n\n private _receiverHelper: ReceiverHelper;\n\n /**\n * The user's message handlers, wrapped so any thrown exceptions are properly logged\n * or forwarded to the user's processError handler.\n */\n private _messageHandlers: () => Required<InternalMessageHandlers> = () => {\n throw new Error(\"messageHandlers are not set.\");\n };\n\n /**\n * The subscribe(options) passed when the subscribe call originally happened. Stored\n * so _subscribeImpl() can re-use them later if we have to restart our subscription\n * when detach/reattaching.\n */\n private _subscribeOptions: SubscribeOptions | undefined;\n\n /**\n * Used so we can stub out retry in tests.\n */\n private _retryForeverFn: typeof retryForever = retryForever;\n\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"receiver_close\" event.\n */\n private _onAmqpClose: OnAmqpEventAsPromise;\n\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea receiver's session for the \"session_close\" event.\n */\n private _onSessionClose: OnAmqpEventAsPromise;\n\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea receiver's session for the \"session_error\" event.\n */\n private _onSessionError: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"receiver_error\" event.\n */\n private _onAmqpError: OnAmqpEvent;\n\n /**\n * The message handler that will be set as the handler on the\n * underlying rhea receiver for the \"message\" event.\n */\n protected _onAmqpMessage: OnAmqpEventAsPromise;\n\n /**\n * Whether we are currently subscribed (or subscribing) for receiving messages.\n * (this is irrespective of receiver state, etc... - it's just a simple flag to prevent\n * multiple subscribe() calls from happening on this instance)\n */\n public get isSubscribeActive(): boolean {\n return !this._receiverHelper.isSuspended();\n }\n\n /**\n * Instantiate a new Streaming receiver for receiving messages with handlers.\n *\n * @param identifier - the name used to identifier the receiver\n * @param connectionContext - The client entity context.\n * @param options - Options for how you'd like to connect.\n */\n constructor(\n identifier: string,\n connectionContext: ConnectionContext,\n entityPath: string,\n options: ReceiveOptions,\n ) {\n super(identifier, connectionContext, entityPath, \"streaming\", options);\n\n if (typeof options?.maxConcurrentCalls === \"number\" && options?.maxConcurrentCalls > 0) {\n this.maxConcurrentCalls = options.maxConcurrentCalls;\n }\n\n this._retryOptions = options?.retryOptions || {};\n\n this._receiverHelper = new ReceiverHelper(() => ({\n receiver: this.link,\n logPrefix: this.logPrefix,\n }));\n\n this._onAmqpClose = async (context: EventContext) => {\n const receiverError = context.receiver && context.receiver.error;\n const receiver = this.link || context.receiver!;\n\n logger.logError(\n receiverError,\n `${this.logPrefix} 'receiver_close' event occurred. The associated error is`,\n );\n\n this._lockRenewer?.stopAll(this);\n\n if (receiver && !receiver.isItselfClosed()) {\n await this.onDetached(receiverError);\n } else {\n logger.verbose(\n \"%s 'receiver_close' event occurred on the receiver '%s' with address '%s' \" +\n \"because the sdk initiated it. Hence not calling detached from the _onAmqpClose\" +\n \"() handler.\",\n this.logPrefix,\n this.name,\n this.address,\n );\n }\n };\n\n this._onSessionClose = async (context: EventContext) => {\n const receiver = this.link || context.receiver!;\n const sessionError = context.session && context.session.error;\n\n logger.logError(\n sessionError,\n `${this.logPrefix} 'session_close' event occurred. The associated error is`,\n );\n\n this._lockRenewer?.stopAll(this);\n\n if (receiver && !receiver.isSessionItselfClosed()) {\n await this.onDetached(sessionError);\n } else {\n logger.verbose(\n \"%s 'session_close' event occurred on the session of receiver '%s' with address \" +\n \"'%s' because the sdk initiated it. Hence not calling detached from the _onSessionClose\" +\n \"() handler.\",\n this.logPrefix,\n this.name,\n this.address,\n );\n }\n };\n\n this._onAmqpError = (context: EventContext) => {\n const receiverError = context.receiver && context.receiver.error;\n if (receiverError) {\n const sbError = translateServiceBusError(receiverError) as MessagingError;\n logger.logError(\n sbError,\n `${this.logPrefix} 'receiver_error' event occurred. The associated error is`,\n );\n this._messageHandlers().processError({\n error: sbError,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n };\n\n this._onSessionError = (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n if (sessionError) {\n const sbError = translateServiceBusError(sessionError) as MessagingError;\n logger.logError(\n sbError,\n `${this.logPrefix} 'session_error' event occurred. The associated error is`,\n );\n this._messageHandlers().processError({\n error: sbError,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n };\n\n this._onAmqpMessage = async (context: EventContext) => {\n // If the receiver got closed in PeekLock mode, avoid processing the message as we\n // cannot settle the message.\n if (this.receiveMode === \"peekLock\" && (!this.link || !this.link.isOpen())) {\n logger.verbose(\n \"%s Not calling the user's message handler for the current message \" +\n \"as the receiver is closed\",\n this.logPrefix,\n );\n return;\n }\n\n const bMessage: ServiceBusMessageImpl = new ServiceBusMessageImpl(\n context.message!,\n context.delivery!,\n true,\n this.receiveMode,\n options.skipParsingBodyAsJson ?? false,\n options.skipConvertingDate ?? false,\n );\n\n this._lockRenewer?.start(this, bMessage, (err) => {\n this._messageHandlers().processError({\n error: err,\n errorSource: \"renewLock\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n });\n\n try {\n await this._messageHandlers().processMessage(bMessage);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s An error occurred while running user's message handler for the message \" +\n \"with id '%s' on the receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n\n // Do not want renewLock to happen unnecessarily, while abandoning the message. Hence,\n // doing this here. Otherwise, this should be done in finally.\n this._lockRenewer?.stop(this, bMessage);\n const error = translateServiceBusError(err) as MessagingError;\n // Nothing much to do if user's message handler throws. Let us try abandoning the message.\n if (\n !bMessage.delivery.remote_settled &&\n error.code !== ConditionErrorNameMapper[\"com.microsoft:message-lock-lost\"] &&\n this.receiveMode === \"peekLock\" &&\n this.isOpen() // only try to abandon the messages if the connection is still open\n ) {\n try {\n logger.logError(\n error,\n \"%s Abandoning the message with id '%s' on the receiver '%s' since \" +\n \"an error occured: %O.\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n error,\n );\n await abandonMessage(\n bMessage,\n this._context,\n entityPath,\n undefined,\n this._retryOptions,\n );\n } catch (abandonError: any) {\n const translatedError = translateServiceBusError(abandonError);\n logger.logError(\n translatedError,\n \"%s An error occurred while abandoning the message with id '%s' on the \" +\n \"receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n this._messageHandlers().processError({\n error: translatedError,\n errorSource: \"abandon\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n }\n return;\n } finally {\n try {\n this._receiverHelper.addCredit(1);\n } catch (err: any) {\n // if we're aborting out of the receive operation we don't need to report it (the user already\n // knows the link is being torn down or stopped)\n if (err.name !== \"AbortError\") {\n logger.logError(\n err,\n `[${this.logPrefix}] Failed to add credit after receiving message`,\n );\n await this._reportInternalError(err);\n }\n }\n }\n\n // If we've made it this far, then user's message handler completed fine. Let us try\n // completing the message.\n if (\n this.autoComplete &&\n this.receiveMode === \"peekLock\" &&\n !bMessage.delivery.remote_settled\n ) {\n try {\n logger.verbose(\n \"%s Auto completing the message with id '%s' on \" + \"the receiver.\",\n this.logPrefix,\n bMessage.messageId,\n );\n await completeMessage(bMessage, this._context, entityPath, this._retryOptions);\n } catch (completeError: any) {\n const translatedError = translateServiceBusError(completeError);\n logger.logError(\n translatedError,\n \"%s An error occurred while completing the message with id '%s' on the \" +\n \"receiver '%s'\",\n this.logPrefix,\n bMessage.messageId,\n this.name,\n );\n this._messageHandlers().processError({\n error: translatedError,\n errorSource: \"complete\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier,\n });\n }\n }\n };\n }\n\n private _reportInternalError(error: Error): Promise<void> {\n const messageHandlers = this._messageHandlers();\n\n if (messageHandlers.forwardInternalErrors) {\n const errorArgs: InternalProcessErrorArgs = {\n error,\n entityPath: this.entityPath,\n errorSource: \"internal\",\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n };\n\n return messageHandlers.processError(errorArgs as ProcessErrorArgs);\n }\n\n return Promise.resolve();\n }\n\n private _getHandlers(): ReceiverHandlers {\n return {\n onMessage: (context: EventContext) =>\n this._onAmqpMessage(context).catch((err) => this._reportInternalError(err)),\n onClose: (context: EventContext) =>\n this._onAmqpClose(context).catch((err) => this._reportInternalError(err)),\n onSessionClose: (context: EventContext) =>\n this._onSessionClose(context).catch((err) => this._reportInternalError(err)),\n onError: this._onAmqpError,\n onSessionError: this._onSessionError,\n };\n }\n\n async stopReceivingMessages(): Promise<void> {\n await this._receiverHelper.suspend();\n\n if (this._subscribeCallPromise) {\n await this._subscribeCallPromise;\n }\n }\n\n async close(): Promise<void> {\n await this._receiverHelper.suspend();\n return super.close();\n }\n\n private _subscribeCallPromise: Promise<void> | undefined;\n\n /**\n * Starts the receiver by establishing an AMQP session and an AMQP receiver link on the session.\n *\n * Any errors thrown by this function will also be sent to the messageHandlers.processError function\n * _and_ thrown, ultimately from this method.\n *\n * NOTE: This function retries _infinitely_ until success! It is completely up to the user to break\n * out of this retry cycle otherwise by:\n * 1. closing the receiver\n * 2. Calling `close` on the subscription instance they received when they initially called subscribe().\n * 3. aborting the abortSignal they passed in when calling subscribe (this also applies to initialization calls in onDetach)\n *\n * @param onMessage - The message handler to receive servicebus messages.\n * @param onError - The error handler to receive an error that occurs while receivin messages.\n */\n async subscribe(\n messageHandlers: InternalMessageHandlers,\n subscribeOptions: SubscribeOptions | undefined,\n ): Promise<void> {\n // these options and message handlers will be re-used if/when onDetach is called.\n this._subscribeOptions = subscribeOptions;\n this._setMessageHandlers(messageHandlers, subscribeOptions);\n\n let promiseResolve: (() => void) | undefined;\n this._subscribeCallPromise = new Promise((resolve) => {\n promiseResolve = resolve;\n });\n\n try {\n this._receiverHelper.resume();\n return await this._subscribeImpl(\"subscribe\");\n } catch (err: any) {\n // callers aren't going to be in a good position to forward this error properly\n // so we do it here.\n await this._messageHandlers().processError({\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n errorSource: \"receive\",\n error: err,\n identifier: this.identifier,\n });\n\n throw err;\n } finally {\n promiseResolve?.();\n this._subscribeCallPromise = undefined;\n }\n }\n\n /**\n * Wraps the individual message handlers with tracing and proper error handling\n * and assigns them to `this._messageHandlers`\n *\n * @param userHandlers - The user's message handlers\n * @param operationOptions - The subscribe(options)\n */\n private _setMessageHandlers(\n userHandlers: InternalMessageHandlers,\n operationOptions: OperationOptionsBase | undefined,\n ): void {\n const messageHandlers = {\n processError: async (args: ProcessErrorArgs) => {\n try {\n args.error = translateServiceBusError(args.error);\n await userHandlers.processError(args);\n } catch (err: any) {\n await this._reportInternalError(err);\n logger.logError(err, `An error was thrown from the user's processError handler`);\n }\n },\n processMessage: async (message: ServiceBusMessageImpl) => {\n try {\n await tracingClient.withSpan(\n \"StreamReceiver.process\",\n operationOptions ?? {},\n () => userHandlers.processMessage(message),\n toProcessingSpanOptions(message, this, this._context.config, \"process\"),\n );\n } catch (err: any) {\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n });\n throw err;\n }\n },\n postInitialize: async () => {\n if (!userHandlers.postInitialize) {\n return;\n }\n\n return userHandlers.postInitialize().catch((err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n );\n },\n preInitialize: async () => {\n if (!userHandlers.preInitialize) {\n return;\n }\n\n return userHandlers.preInitialize().catch((err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"processMessageCallback\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n );\n },\n forwardInternalErrors: userHandlers.forwardInternalErrors ?? false,\n };\n\n this._messageHandlers = () => messageHandlers;\n }\n\n /**\n * Subscribes using the already assigned `this._messageHandlers` and `this._subscribeOptions`\n *\n * @returns A promise that will resolve when a link is created and we successfully add credits to it.\n */\n private async _subscribeImpl(caller: \"detach\" | \"subscribe\"): Promise<void> {\n try {\n // we don't expect to ever get an error from retryForever but bugs\n // do happen.\n return await this._retryForeverFn({\n retryConfig: {\n connectionId: this._context.connection.id,\n operationType: RetryOperationType.receiverLink,\n abortSignal: this._subscribeOptions?.abortSignal,\n retryOptions: this._retryOptions,\n operation: () => this._initAndAddCreditOperation(caller),\n },\n onError: (err) =>\n this._messageHandlers().processError({\n error: err,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n }),\n logPrefix: this.logPrefix,\n logger,\n });\n } catch (err: any) {\n try {\n await this._receiverHelper.suspend();\n } catch (error: any) {\n logger.logError(error, `${this.logPrefix} receiver.suspend threw an error`);\n }\n\n throw err;\n }\n }\n\n /**\n * Initializes the link and adds credits. If any of these operations fail any created link will\n * be closed.\n *\n * @param caller - The caller which dictates whether or not we create a new name for our created link.\n * @param catchAndReportError - A function and reports an error but does not throw it.\n */\n private async _initAndAddCreditOperation(caller: \"detach\" | \"subscribe\"): Promise<void> {\n if (this._receiverHelper.isSuspended()) {\n // user has suspended us while we were initializing\n // the connection. Abort this attempt - if they attempt\n // resubscribe we'll just reinitialize.\n // This checks should happen before throwErrorIfConnectionClosed(); otherwise\n // we won't be able to break out of the retry-for-ever loops when user suspend us.\n throw new AbortError(\"Receiver was suspended during initialization.\");\n }\n\n throwErrorIfConnectionClosed(this._context);\n\n await this._messageHandlers().preInitialize();\n\n if (this._receiverHelper.isSuspended()) {\n // Need to check again as user can suspend us in preInitialize()\n throw new AbortError(\"Receiver was suspended during initialization.\");\n }\n await this._init(\n this._createReceiverOptions(caller === \"detach\", this._getHandlers()),\n this._subscribeOptions?.abortSignal,\n );\n\n try {\n await this._messageHandlers().postInitialize();\n this._receiverHelper.addCredit(this.maxConcurrentCalls);\n } catch (err: any) {\n try {\n await this.closeLink();\n } catch (error: any) {\n await this._messageHandlers().processError({\n error,\n errorSource: \"receive\",\n entityPath: this.entityPath,\n fullyQualifiedNamespace: this._context.config.host,\n identifier: this.identifier,\n });\n }\n throw err;\n }\n }\n\n /**\n * Will reconnect the receiver link if necessary.\n * @param receiverError - The receiver error or connection error, if any.\n */\n async onDetached(receiverError?: AmqpError | Error): Promise<void> {\n try {\n logger.verbose(`${this.logPrefix} onDetached: reinitializing link.`);\n\n // User explicitly called `close` on the receiver, so link is already closed\n // and we can exit early.\n if (this.wasClosedPermanently) {\n logger.verbose(\n `${this.logPrefix} onDetached: link has been closed permanently, not reinitializing. `,\n );\n return;\n }\n\n // Prevent multiple onDetached invocations from running concurrently.\n if (this._isDetaching) {\n // This can happen when the network connection goes down for some amount of time.\n // The first connection `disconnect` will trigger `onDetached` and attempt to retry\n // creating the connection/receiver link.\n // While those retry attempts fail (until the network connection comes back up),\n // we'll continue to see connection `disconnect` errors.\n // These should be ignored until the already running `onDetached` completes\n // its retry attempts or errors.\n logger.verbose(\n `${this.logPrefix} onDetached: Call to detached on streaming receiver '${this.name}' is already in progress.`,\n );\n return;\n }\n\n this._isDetaching = true;\n\n const translatedError = receiverError\n ? translateServiceBusError(receiverError)\n : receiverError;\n logger.logError(\n translatedError,\n `${this.logPrefix} onDetached: Reinitializing receiver because of error`,\n );\n\n // Clears the token renewal timer. Closes the link and its session if they are open.\n // Removes the link and its session if they are present in rhea's cache.\n await this.closeLink();\n } catch (err: any) {\n logger.verbose(\n `${this.logPrefix} onDetached: Encountered an error when closing the previous link: `,\n err,\n );\n }\n\n try {\n await this._subscribeImpl(\"detach\");\n } finally {\n this._isDetaching = false;\n }\n }\n\n protected removeLinkFromContext(): void {\n delete this._context.messageReceivers[this.name];\n }\n}\n"]}
|
|
@@ -17,9 +17,8 @@ exports.TRACEPARENT_PROPERTY = "Diagnostic-Id";
|
|
|
17
17
|
* @hidden
|
|
18
18
|
*/
|
|
19
19
|
function instrumentMessage(message, options, entityPath, host, operation) {
|
|
20
|
-
var _a, _b, _c;
|
|
21
20
|
// check if the event has already been instrumented
|
|
22
|
-
const previouslyInstrumented = Boolean(
|
|
21
|
+
const previouslyInstrumented = Boolean(message.applicationProperties?.[exports.TRACEPARENT_PROPERTY]);
|
|
23
22
|
if (previouslyInstrumented) {
|
|
24
23
|
return {
|
|
25
24
|
message,
|
|
@@ -34,14 +33,20 @@ function instrumentMessage(message, options, entityPath, host, operation) {
|
|
|
34
33
|
spanContext: undefined,
|
|
35
34
|
};
|
|
36
35
|
}
|
|
37
|
-
const traceParent = tracing_js_1.tracingClient.createRequestHeaders(
|
|
36
|
+
const traceParent = tracing_js_1.tracingClient.createRequestHeaders(updatedOptions.tracingOptions?.tracingContext)["traceparent"];
|
|
38
37
|
if (traceParent) {
|
|
39
38
|
// create a copy so the original isn't modified
|
|
40
|
-
message =
|
|
39
|
+
message = {
|
|
40
|
+
...message,
|
|
41
|
+
applicationProperties: {
|
|
42
|
+
...message.applicationProperties,
|
|
43
|
+
[exports.TRACEPARENT_PROPERTY]: traceParent,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
41
46
|
}
|
|
42
47
|
return {
|
|
43
48
|
message,
|
|
44
|
-
spanContext:
|
|
49
|
+
spanContext: updatedOptions.tracingOptions?.tracingContext,
|
|
45
50
|
};
|
|
46
51
|
}
|
|
47
52
|
finally {
|
|
@@ -81,7 +86,6 @@ function* getReceivedMessages(receivedMessages) {
|
|
|
81
86
|
* @internal
|
|
82
87
|
*/
|
|
83
88
|
function toProcessingSpanOptions(receivedMessages, receiver, connectionConfig, operation) {
|
|
84
|
-
var _a;
|
|
85
89
|
const spanLinks = [];
|
|
86
90
|
for (const receivedMessage of getReceivedMessages(receivedMessages)) {
|
|
87
91
|
const tracingContext = extractSpanContextFromServiceBusMessage(receivedMessage);
|
|
@@ -89,11 +93,15 @@ function toProcessingSpanOptions(receivedMessages, receiver, connectionConfig, o
|
|
|
89
93
|
spanLinks.push({
|
|
90
94
|
tracingContext,
|
|
91
95
|
attributes: {
|
|
92
|
-
enqueuedTime:
|
|
96
|
+
enqueuedTime: receivedMessage.enqueuedTimeUtc?.getTime(),
|
|
93
97
|
},
|
|
94
98
|
});
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
|
-
return
|
|
101
|
+
return {
|
|
102
|
+
spanLinks,
|
|
103
|
+
spanKind: "consumer",
|
|
104
|
+
...(0, tracing_js_1.toSpanOptions)({ host: connectionConfig.host, entityPath: receiver.entityPath }, operation),
|
|
105
|
+
};
|
|
98
106
|
}
|
|
99
107
|
//# sourceMappingURL=instrumentServiceBusMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentServiceBusMessage.js","sourceRoot":"","sources":["../../../src/diagnostics/instrumentServiceBusMessage.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AA+BlC,8CAiEC;AAOD,0FASC;AAwBD,0DAuBC;AAvJD,6CAA4D;AAE5D;;GAEG;AACU,QAAA,oBAAoB,GAAG,eAAe,CAAC;AAapD;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,OAAU,EACV,OAA6B,EAC7B,UAAkB,EAClB,IAAY,EACZ,SAAkC
|
|
1
|
+
{"version":3,"file":"instrumentServiceBusMessage.js","sourceRoot":"","sources":["../../../src/diagnostics/instrumentServiceBusMessage.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { TracingContext, TracingSpanLink, TracingSpanOptions } from \"@azure/core-tracing\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport type { OperationOptionsBase } from \"../modelsToBeSharedWithEventHubs.js\";\nimport type { ServiceBusReceiver } from \"../receivers/receiver.js\";\nimport type { ServiceBusMessage, ServiceBusReceivedMessage } from \"../serviceBusMessage.js\";\nimport type { MessagingOperationNames } from \"./tracing.js\";\nimport { toSpanOptions, tracingClient } from \"./tracing.js\";\n\n/**\n * @internal\n */\nexport const TRACEPARENT_PROPERTY = \"Diagnostic-Id\";\n\n/**\n * @hidden\n */\nexport interface InstrumentableMessage {\n /**\n * The application specific properties which can be\n * used for custom message metadata.\n */\n applicationProperties?: { [key: string]: number | boolean | string | Date | null };\n}\n\n/**\n * Instruments an AMQP message with a proper `Diagnostic-Id` for tracing.\n *\n * @hidden\n */\nexport function instrumentMessage<T extends InstrumentableMessage>(\n message: T,\n options: OperationOptionsBase,\n entityPath: string,\n host: string,\n operation: MessagingOperationNames,\n): {\n /**\n * If instrumentation was done, a copy of the message with\n * message.applicationProperties['Diagnostic-Id'] filled\n * out appropriately.\n */\n message: T;\n\n /**\n * A valid SpanContext if this message should be linked to a parent span, or undefined otherwise.\n */\n spanContext: TracingContext | undefined;\n} {\n // check if the event has already been instrumented\n const previouslyInstrumented = Boolean(message.applicationProperties?.[TRACEPARENT_PROPERTY]);\n\n if (previouslyInstrumented) {\n return {\n message,\n spanContext: undefined,\n };\n }\n\n const { span: messageSpan, updatedOptions } = tracingClient.startSpan(\n \"message\",\n options,\n toSpanOptions({ entityPath, host }, operation, \"producer\"),\n );\n\n try {\n if (!messageSpan.isRecording()) {\n return {\n message,\n spanContext: undefined,\n };\n }\n\n const traceParent = tracingClient.createRequestHeaders(\n updatedOptions.tracingOptions?.tracingContext,\n )[\"traceparent\"];\n\n if (traceParent) {\n // create a copy so the original isn't modified\n message = {\n ...message,\n applicationProperties: {\n ...message.applicationProperties,\n [TRACEPARENT_PROPERTY]: traceParent,\n },\n };\n }\n\n return {\n message,\n spanContext: updatedOptions.tracingOptions?.tracingContext,\n };\n } finally {\n messageSpan.end();\n }\n}\n\n/**\n * Extracts the `SpanContext` from an `ServiceBusMessage` if the context exists.\n * @param message - An individual `ServiceBusMessage` object.\n * @internal\n */\nexport function extractSpanContextFromServiceBusMessage(\n message: ServiceBusMessage,\n): TracingContext | undefined {\n if (!message.applicationProperties || !message.applicationProperties[TRACEPARENT_PROPERTY]) {\n return;\n }\n\n const diagnosticId = message.applicationProperties[TRACEPARENT_PROPERTY] as string;\n return tracingClient.parseTraceparentHeader(diagnosticId);\n}\n\n/**\n * Provides an iterable over messages, whether it is a single message or multiple\n * messages.\n *\n * @param receivedMessages - A single message or a set of messages\n * @internal\n */\nfunction* getReceivedMessages(\n receivedMessages: ServiceBusReceivedMessage | ServiceBusReceivedMessage[],\n): Iterable<ServiceBusReceivedMessage> {\n if (!Array.isArray(receivedMessages)) {\n yield receivedMessages;\n } else {\n for (const message of receivedMessages) {\n yield message;\n }\n }\n}\n\n/**\n * @internal\n */\nexport function toProcessingSpanOptions(\n receivedMessages: ServiceBusReceivedMessage | ServiceBusReceivedMessage[],\n receiver: Pick<ServiceBusReceiver, \"entityPath\">,\n connectionConfig: Pick<ConnectionContext[\"config\"], \"host\">,\n operation: MessagingOperationNames,\n): TracingSpanOptions {\n const spanLinks: TracingSpanLink[] = [];\n for (const receivedMessage of getReceivedMessages(receivedMessages)) {\n const tracingContext = extractSpanContextFromServiceBusMessage(receivedMessage);\n if (tracingContext) {\n spanLinks.push({\n tracingContext,\n attributes: {\n enqueuedTime: receivedMessage.enqueuedTimeUtc?.getTime(),\n },\n });\n }\n }\n return {\n spanLinks,\n spanKind: \"consumer\",\n ...toSpanOptions({ host: connectionConfig.host, entityPath: receiver.entityPath }, operation),\n };\n}\n"]}
|