rocketmq-client-nodejs-bate 1.0.12
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/LICENSE +201 -0
- package/README.md +186 -0
- package/dist/client/BaseClient.d.ts +95 -0
- package/dist/client/BaseClient.js +324 -0
- package/dist/client/ClientId.d.ts +24 -0
- package/dist/client/ClientId.js +33 -0
- package/dist/client/Logger.d.ts +25 -0
- package/dist/client/Logger.js +33 -0
- package/dist/client/RpcClient.d.ts +48 -0
- package/dist/client/RpcClient.js +219 -0
- package/dist/client/RpcClientManager.d.ts +42 -0
- package/dist/client/RpcClientManager.js +144 -0
- package/dist/client/SessionCredentials.d.ts +21 -0
- package/dist/client/SessionCredentials.js +19 -0
- package/dist/client/Settings.d.ts +31 -0
- package/dist/client/Settings.js +40 -0
- package/dist/client/TelemetrySession.d.ts +27 -0
- package/dist/client/TelemetrySession.js +110 -0
- package/dist/client/UserAgent.d.ts +25 -0
- package/dist/client/UserAgent.js +47 -0
- package/dist/client/index.d.ts +26 -0
- package/dist/client/index.js +43 -0
- package/dist/consumer/Assignment.d.ts +23 -0
- package/dist/consumer/Assignment.js +40 -0
- package/dist/consumer/Assignments.d.ts +24 -0
- package/dist/consumer/Assignments.js +47 -0
- package/dist/consumer/ConsumeResult.d.ts +20 -0
- package/dist/consumer/ConsumeResult.js +25 -0
- package/dist/consumer/ConsumeService.d.ts +28 -0
- package/dist/consumer/ConsumeService.js +49 -0
- package/dist/consumer/ConsumeTask.d.ts +24 -0
- package/dist/consumer/ConsumeTask.js +40 -0
- package/dist/consumer/Consumer.d.ts +38 -0
- package/dist/consumer/Consumer.js +111 -0
- package/dist/consumer/FifoConsumeService.d.ts +25 -0
- package/dist/consumer/FifoConsumeService.js +123 -0
- package/dist/consumer/FilterExpression.d.ts +25 -0
- package/dist/consumer/FilterExpression.js +40 -0
- package/dist/consumer/MessageListener.d.ts +21 -0
- package/dist/consumer/MessageListener.js +19 -0
- package/dist/consumer/ProcessQueue.d.ts +39 -0
- package/dist/consumer/ProcessQueue.js +286 -0
- package/dist/consumer/PushConsumer.d.ts +68 -0
- package/dist/consumer/PushConsumer.js +377 -0
- package/dist/consumer/PushSubscriptionSettings.d.ts +31 -0
- package/dist/consumer/PushSubscriptionSettings.js +97 -0
- package/dist/consumer/SimpleConsumer.d.ts +50 -0
- package/dist/consumer/SimpleConsumer.js +122 -0
- package/dist/consumer/SimpleSubscriptionSettings.d.ts +28 -0
- package/dist/consumer/SimpleSubscriptionSettings.js +57 -0
- package/dist/consumer/StandardConsumeService.d.ts +24 -0
- package/dist/consumer/StandardConsumeService.js +42 -0
- package/dist/consumer/SubscriptionLoadBalancer.d.ts +23 -0
- package/dist/consumer/SubscriptionLoadBalancer.js +46 -0
- package/dist/consumer/index.d.ts +32 -0
- package/dist/consumer/index.js +49 -0
- package/dist/exception/BadRequestException.d.ts +20 -0
- package/dist/exception/BadRequestException.js +28 -0
- package/dist/exception/ClientException.d.ts +20 -0
- package/dist/exception/ClientException.js +31 -0
- package/dist/exception/ForbiddenException.d.ts +20 -0
- package/dist/exception/ForbiddenException.js +28 -0
- package/dist/exception/InternalErrorException.d.ts +20 -0
- package/dist/exception/InternalErrorException.js +28 -0
- package/dist/exception/NotFoundException.d.ts +20 -0
- package/dist/exception/NotFoundException.js +28 -0
- package/dist/exception/PayloadTooLargeException.d.ts +20 -0
- package/dist/exception/PayloadTooLargeException.js +28 -0
- package/dist/exception/PaymentRequiredException.d.ts +20 -0
- package/dist/exception/PaymentRequiredException.js +28 -0
- package/dist/exception/ProxyTimeoutException.d.ts +20 -0
- package/dist/exception/ProxyTimeoutException.js +28 -0
- package/dist/exception/RequestHeaderFieldsTooLargeException.d.ts +20 -0
- package/dist/exception/RequestHeaderFieldsTooLargeException.js +28 -0
- package/dist/exception/StatusChecker.d.ts +20 -0
- package/dist/exception/StatusChecker.js +98 -0
- package/dist/exception/TooManyRequestsException.d.ts +20 -0
- package/dist/exception/TooManyRequestsException.js +28 -0
- package/dist/exception/UnauthorizedException.d.ts +20 -0
- package/dist/exception/UnauthorizedException.js +28 -0
- package/dist/exception/UnsupportedException.d.ts +20 -0
- package/dist/exception/UnsupportedException.js +28 -0
- package/dist/exception/index.d.ts +29 -0
- package/dist/exception/index.js +46 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +39 -0
- package/dist/message/Message.d.ts +38 -0
- package/dist/message/Message.js +57 -0
- package/dist/message/MessageId.d.ts +59 -0
- package/dist/message/MessageId.js +123 -0
- package/dist/message/MessageView.d.ts +38 -0
- package/dist/message/MessageView.js +90 -0
- package/dist/message/PublishingMessage.d.ts +30 -0
- package/dist/message/PublishingMessage.js +100 -0
- package/dist/message/index.d.ts +20 -0
- package/dist/message/index.js +37 -0
- package/dist/producer/Producer.d.ts +55 -0
- package/dist/producer/Producer.js +318 -0
- package/dist/producer/PublishingLoadBalancer.d.ts +24 -0
- package/dist/producer/PublishingLoadBalancer.js +82 -0
- package/dist/producer/PublishingSettings.d.ts +28 -0
- package/dist/producer/PublishingSettings.js +70 -0
- package/dist/producer/RecallReceipt.d.ts +25 -0
- package/dist/producer/RecallReceipt.js +34 -0
- package/dist/producer/SendReceipt.d.ts +29 -0
- package/dist/producer/SendReceipt.js +60 -0
- package/dist/producer/Transaction.d.ts +28 -0
- package/dist/producer/Transaction.js +70 -0
- package/dist/producer/TransactionChecker.d.ts +21 -0
- package/dist/producer/TransactionChecker.js +19 -0
- package/dist/producer/index.d.ts +22 -0
- package/dist/producer/index.js +40 -0
- package/dist/retry/ExponentialBackoffRetryPolicy.d.ts +27 -0
- package/dist/retry/ExponentialBackoffRetryPolicy.js +64 -0
- package/dist/retry/RetryPolicy.d.ts +46 -0
- package/dist/retry/RetryPolicy.js +19 -0
- package/dist/retry/index.d.ts +18 -0
- package/dist/retry/index.js +35 -0
- package/dist/route/Broker.d.ts +25 -0
- package/dist/route/Broker.js +40 -0
- package/dist/route/Endpoints.d.ts +30 -0
- package/dist/route/Endpoints.js +71 -0
- package/dist/route/MessageQueue.d.ts +27 -0
- package/dist/route/MessageQueue.js +47 -0
- package/dist/route/TopicRouteData.d.ts +24 -0
- package/dist/route/TopicRouteData.js +37 -0
- package/dist/route/index.d.ts +20 -0
- package/dist/route/index.js +37 -0
- package/dist/util/index.d.ts +35 -0
- package/dist/util/index.js +88 -0
- package/package.json +62 -0
- package/proto/apache/rocketmq/v2/admin.proto +43 -0
- package/proto/apache/rocketmq/v2/admin_grpc_pb.d.ts +41 -0
- package/proto/apache/rocketmq/v2/admin_grpc_pb.js +60 -0
- package/proto/apache/rocketmq/v2/admin_pb.d.ts +56 -0
- package/proto/apache/rocketmq/v2/admin_pb.js +340 -0
- package/proto/apache/rocketmq/v2/definition.proto +570 -0
- package/proto/apache/rocketmq/v2/definition_grpc_pb.js +1 -0
- package/proto/apache/rocketmq/v2/definition_pb.d.ts +885 -0
- package/proto/apache/rocketmq/v2/definition_pb.js +6141 -0
- package/proto/apache/rocketmq/v2/service.proto +443 -0
- package/proto/apache/rocketmq/v2/service_grpc_pb.d.ts +294 -0
- package/proto/apache/rocketmq/v2/service_grpc_pb.js +637 -0
- package/proto/apache/rocketmq/v2/service_pb.d.ts +1249 -0
- package/proto/apache/rocketmq/v2/service_pb.js +9723 -0
- package/src/client/BaseClient.ts +404 -0
- package/src/client/ClientId.ts +31 -0
- package/src/client/Logger.ts +36 -0
- package/src/client/RpcClient.ts +258 -0
- package/src/client/RpcClientManager.ts +180 -0
- package/src/client/SessionCredentials.ts +22 -0
- package/src/client/Settings.ts +46 -0
- package/src/client/TelemetrySession.ts +130 -0
- package/src/client/UserAgent.ts +45 -0
- package/src/client/index.ts +27 -0
- package/src/consumer/Assignment.ts +39 -0
- package/src/consumer/Assignments.ts +46 -0
- package/src/consumer/ConsumeResult.ts +21 -0
- package/src/consumer/ConsumeService.ts +54 -0
- package/src/consumer/ConsumeTask.ts +40 -0
- package/src/consumer/Consumer.ts +129 -0
- package/src/consumer/FifoConsumeService.ts +136 -0
- package/src/consumer/FilterExpression.ts +42 -0
- package/src/consumer/MessageListener.ts +23 -0
- package/src/consumer/ProcessQueue.ts +326 -0
- package/src/consumer/PushConsumer.ts +473 -0
- package/src/consumer/PushSubscriptionSettings.ts +123 -0
- package/src/consumer/SimpleConsumer.ts +153 -0
- package/src/consumer/SimpleSubscriptionSettings.ts +64 -0
- package/src/consumer/StandardConsumeService.ts +44 -0
- package/src/consumer/SubscriptionLoadBalancer.ts +47 -0
- package/src/consumer/index.ts +33 -0
- package/src/exception/BadRequestException.ts +25 -0
- package/src/exception/ClientException.ts +29 -0
- package/src/exception/ForbiddenException.ts +25 -0
- package/src/exception/InternalErrorException.ts +25 -0
- package/src/exception/NotFoundException.ts +25 -0
- package/src/exception/PayloadTooLargeException.ts +25 -0
- package/src/exception/PaymentRequiredException.ts +25 -0
- package/src/exception/ProxyTimeoutException.ts +25 -0
- package/src/exception/RequestHeaderFieldsTooLargeException.ts +25 -0
- package/src/exception/StatusChecker.ts +94 -0
- package/src/exception/TooManyRequestsException.ts +25 -0
- package/src/exception/UnauthorizedException.ts +25 -0
- package/src/exception/UnsupportedException.ts +25 -0
- package/src/exception/index.ts +30 -0
- package/src/index.ts +23 -0
- package/src/message/Message.ts +67 -0
- package/src/message/MessageId.ts +123 -0
- package/src/message/MessageView.ts +94 -0
- package/src/message/PublishingMessage.ts +104 -0
- package/src/message/index.ts +21 -0
- package/src/producer/Producer.ts +388 -0
- package/src/producer/PublishingLoadBalancer.ts +85 -0
- package/src/producer/PublishingSettings.ts +78 -0
- package/src/producer/RecallReceipt.ts +32 -0
- package/src/producer/SendReceipt.ts +63 -0
- package/src/producer/Transaction.ts +86 -0
- package/src/producer/TransactionChecker.ts +23 -0
- package/src/producer/index.ts +24 -0
- package/src/retry/ExponentialBackoffRetryPolicy.ts +76 -0
- package/src/retry/RetryPolicy.ts +51 -0
- package/src/retry/index.ts +19 -0
- package/src/route/Broker.ts +39 -0
- package/src/route/Endpoints.ts +70 -0
- package/src/route/MessageQueue.ts +49 -0
- package/src/route/TopicRouteData.ts +38 -0
- package/src/route/index.ts +21 -0
- package/src/util/index.ts +83 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
4
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
5
|
+
* this work for additional information regarding copyright ownership.
|
|
6
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
7
|
+
* (the "License"); you may not use this file except in compliance with
|
|
8
|
+
* the License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.PublishingMessage = void 0;
|
|
20
|
+
const timestamp_pb_1 = require("google-protobuf/google/protobuf/timestamp_pb");
|
|
21
|
+
const definition_pb_1 = require("../../proto/apache/rocketmq/v2/definition_pb");
|
|
22
|
+
const util_1 = require("../util");
|
|
23
|
+
const client_1 = require("../client");
|
|
24
|
+
const Message_1 = require("./Message");
|
|
25
|
+
const MessageId_1 = require("./MessageId");
|
|
26
|
+
class PublishingMessage extends Message_1.Message {
|
|
27
|
+
messageId;
|
|
28
|
+
messageType;
|
|
29
|
+
constructor(options, publishingSettings, txEnabled) {
|
|
30
|
+
super(options);
|
|
31
|
+
const length = this.body.length;
|
|
32
|
+
const maxBodySizeBytes = publishingSettings.maxBodySizeBytes;
|
|
33
|
+
if (length > maxBodySizeBytes) {
|
|
34
|
+
throw new TypeError(`Message body size exceeds the threshold, max size=${maxBodySizeBytes} bytes`);
|
|
35
|
+
}
|
|
36
|
+
// Generate message id.
|
|
37
|
+
this.messageId = MessageId_1.MessageIdFactory.create().toString();
|
|
38
|
+
// Normal message.
|
|
39
|
+
if (!this.messageGroup && !this.deliveryTimestamp && !txEnabled) {
|
|
40
|
+
this.messageType = definition_pb_1.MessageType.NORMAL;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Fifo message.
|
|
44
|
+
if (this.messageGroup && !txEnabled) {
|
|
45
|
+
this.messageType = definition_pb_1.MessageType.FIFO;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Delay message.
|
|
49
|
+
if (this.deliveryTimestamp && !txEnabled) {
|
|
50
|
+
this.messageType = definition_pb_1.MessageType.DELAY;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Transaction message.
|
|
54
|
+
if (!this.messageGroup &&
|
|
55
|
+
!this.deliveryTimestamp && txEnabled) {
|
|
56
|
+
this.messageType = definition_pb_1.MessageType.TRANSACTION;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Transaction semantics is conflicted with fifo/delay.
|
|
60
|
+
throw new TypeError('Transactional message should not set messageGroup or deliveryTimestamp');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* This method should be invoked before each message sending, because the born time is reset before each
|
|
64
|
+
* invocation, which means that it should not be invoked ahead of time.
|
|
65
|
+
*/
|
|
66
|
+
toProtobuf(namespace, mq) {
|
|
67
|
+
const systemProperties = new definition_pb_1.SystemProperties()
|
|
68
|
+
.setKeysList(this.keys)
|
|
69
|
+
.setMessageId(this.messageId)
|
|
70
|
+
.setBornTimestamp(timestamp_pb_1.Timestamp.fromDate(new Date()))
|
|
71
|
+
.setBornHost(client_1.UserAgent.INSTANCE.hostname)
|
|
72
|
+
.setBodyEncoding(definition_pb_1.Encoding.IDENTITY)
|
|
73
|
+
.setQueueId(mq.queueId)
|
|
74
|
+
.setMessageType(this.messageType);
|
|
75
|
+
if (this.tag) {
|
|
76
|
+
systemProperties.setTag(this.tag);
|
|
77
|
+
}
|
|
78
|
+
if (this.deliveryTimestamp) {
|
|
79
|
+
systemProperties.setDeliveryTimestamp(timestamp_pb_1.Timestamp.fromDate(this.deliveryTimestamp));
|
|
80
|
+
}
|
|
81
|
+
if (this.messageGroup) {
|
|
82
|
+
systemProperties.setMessageGroup(this.messageGroup);
|
|
83
|
+
}
|
|
84
|
+
const resource = (0, util_1.createResource)(this.topic);
|
|
85
|
+
resource.setResourceNamespace(namespace);
|
|
86
|
+
const message = new definition_pb_1.Message()
|
|
87
|
+
.setTopic(resource)
|
|
88
|
+
.setBody(this.body)
|
|
89
|
+
.setSystemProperties(systemProperties);
|
|
90
|
+
if (this.properties) {
|
|
91
|
+
const userProperties = message.getUserPropertiesMap();
|
|
92
|
+
for (const [key, value] of this.properties.entries()) {
|
|
93
|
+
userProperties.set(key, value);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return message;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.PublishingMessage = PublishingMessage;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHVibGlzaGluZ01lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWVzc2FnZS9QdWJsaXNoaW5nTWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFFSCwrRUFBeUU7QUFDekUsZ0ZBRXNEO0FBRXRELGtDQUF5QztBQUV6QyxzQ0FBc0M7QUFDdEMsdUNBQW9EO0FBQ3BELDJDQUErQztBQUUvQyxNQUFhLGlCQUFrQixTQUFRLGlCQUFPO0lBQ25DLFNBQVMsQ0FBUztJQUNsQixXQUFXLENBQWM7SUFFbEMsWUFBWSxPQUF1QixFQUFFLGtCQUFzQyxFQUFFLFNBQWtCO1FBQzdGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsSUFBSSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksU0FBUyxDQUFDLHFEQUFxRCxnQkFBZ0IsUUFBUSxDQUFDLENBQUM7UUFDckcsQ0FBQztRQUNELHVCQUF1QjtRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLDRCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsMkJBQVcsQ0FBQyxNQUFNLENBQUM7WUFDdEMsT0FBTztRQUNULENBQUM7UUFDRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcs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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
3
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
4
|
+
* this work for additional information regarding copyright ownership.
|
|
5
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
6
|
+
* (the "License"); you may not use this file except in compliance with
|
|
7
|
+
* the License. You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export * from './Message';
|
|
18
|
+
export * from './MessageId';
|
|
19
|
+
export * from './MessageView';
|
|
20
|
+
export * from './PublishingMessage';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
4
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
5
|
+
* this work for additional information regarding copyright ownership.
|
|
6
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
7
|
+
* (the "License"); you may not use this file except in compliance with
|
|
8
|
+
* the License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
30
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
__exportStar(require("./Message"), exports);
|
|
34
|
+
__exportStar(require("./MessageId"), exports);
|
|
35
|
+
__exportStar(require("./MessageView"), exports);
|
|
36
|
+
__exportStar(require("./PublishingMessage"), exports);
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWVzc2FnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsNENBQTBCO0FBQzFCLDhDQUE0QjtBQUM1QixnREFBOEI7QUFDOUIsc0RBQW9DIn0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
3
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
4
|
+
* this work for additional information regarding copyright ownership.
|
|
5
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
6
|
+
* (the "License"); you may not use this file except in compliance with
|
|
7
|
+
* the License. You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { TransactionResolution, TransactionSource } from '../../proto/apache/rocketmq/v2/definition_pb';
|
|
18
|
+
import { HeartbeatRequest, NotifyClientTerminationRequest, RecoverOrphanedTransactionCommand } from '../../proto/apache/rocketmq/v2/service_pb';
|
|
19
|
+
import { Endpoints } from '../route';
|
|
20
|
+
import { BaseClient, BaseClientOptions, Settings } from '../client';
|
|
21
|
+
import { MessageOptions, Message } from '../message';
|
|
22
|
+
import { PublishingSettings } from './PublishingSettings';
|
|
23
|
+
import { TransactionChecker } from './TransactionChecker';
|
|
24
|
+
import { SendReceipt } from './SendReceipt';
|
|
25
|
+
import { Transaction } from './Transaction';
|
|
26
|
+
import { RecallReceipt } from './RecallReceipt';
|
|
27
|
+
export interface ProducerOptions extends BaseClientOptions {
|
|
28
|
+
topic?: string | string[];
|
|
29
|
+
maxAttempts?: number;
|
|
30
|
+
checker?: TransactionChecker;
|
|
31
|
+
}
|
|
32
|
+
export declare class Producer extends BaseClient {
|
|
33
|
+
#private;
|
|
34
|
+
constructor(options: ProducerOptions);
|
|
35
|
+
startup(): Promise<void>;
|
|
36
|
+
shutdown(): Promise<void>;
|
|
37
|
+
get publishingSettings(): PublishingSettings;
|
|
38
|
+
beginTransaction(): Transaction;
|
|
39
|
+
endTransaction(endpoints: Endpoints, message: Message, messageId: string, transactionId: string, resolution: TransactionResolution, source?: TransactionSource): Promise<void>;
|
|
40
|
+
onRecoverOrphanedTransactionCommand(endpoints: Endpoints, command: RecoverOrphanedTransactionCommand): Promise<void>;
|
|
41
|
+
protected getSettings(): Settings;
|
|
42
|
+
protected wrapHeartbeatRequest(): HeartbeatRequest;
|
|
43
|
+
protected wrapNotifyClientTerminationRequest(): NotifyClientTerminationRequest;
|
|
44
|
+
send(message: MessageOptions, transaction?: Transaction): Promise<SendReceipt>;
|
|
45
|
+
/**
|
|
46
|
+
* Recalls a scheduled/delayed message based on the topic and recall handle.
|
|
47
|
+
* This operation requires server support and can only be performed before the message is delivered.
|
|
48
|
+
*
|
|
49
|
+
* @param topic - The topic associated with the scheduled message to be canceled.
|
|
50
|
+
* @param recallHandle - A unique handle to identify the message to recall (obtained from SendReceipt).
|
|
51
|
+
* @returns Promise resolving to RecallReceipt containing the recalled message ID.
|
|
52
|
+
* @throws Error if producer is not running or recall handle is invalid.
|
|
53
|
+
*/
|
|
54
|
+
recallMessage(topic: string, recallHandle: string): Promise<RecallReceipt>;
|
|
55
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
4
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
5
|
+
* this work for additional information regarding copyright ownership.
|
|
6
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
7
|
+
* (the "License"); you may not use this file except in compliance with
|
|
8
|
+
* the License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.Producer = void 0;
|
|
20
|
+
const assert = require("node:assert");
|
|
21
|
+
const promises_1 = require("node:timers/promises");
|
|
22
|
+
const definition_pb_1 = require("../../proto/apache/rocketmq/v2/definition_pb");
|
|
23
|
+
const service_pb_1 = require("../../proto/apache/rocketmq/v2/service_pb");
|
|
24
|
+
const retry_1 = require("../retry");
|
|
25
|
+
const exception_1 = require("../exception");
|
|
26
|
+
const client_1 = require("../client");
|
|
27
|
+
const message_1 = require("../message");
|
|
28
|
+
const PublishingSettings_1 = require("./PublishingSettings");
|
|
29
|
+
const PublishingLoadBalancer_1 = require("./PublishingLoadBalancer");
|
|
30
|
+
const SendReceipt_1 = require("./SendReceipt");
|
|
31
|
+
const Transaction_1 = require("./Transaction");
|
|
32
|
+
const util_1 = require("../util");
|
|
33
|
+
const RecallReceipt_1 = require("./RecallReceipt");
|
|
34
|
+
const service_pb_2 = require("../../proto/apache/rocketmq/v2/service_pb");
|
|
35
|
+
class Producer extends client_1.BaseClient {
|
|
36
|
+
#publishingSettings;
|
|
37
|
+
#checker;
|
|
38
|
+
#publishingRouteDataCache = new Map();
|
|
39
|
+
constructor(options) {
|
|
40
|
+
if (!options.topics && options.topic) {
|
|
41
|
+
options.topics = Array.isArray(options.topic) ? options.topic : [options.topic];
|
|
42
|
+
}
|
|
43
|
+
super(options);
|
|
44
|
+
// https://rocketmq.apache.org/docs/introduction/03limits/
|
|
45
|
+
// Default max number of message sending retries is 3
|
|
46
|
+
const retryPolicy = retry_1.ExponentialBackoffRetryPolicy.immediatelyRetryPolicy(options.maxAttempts ?? 3);
|
|
47
|
+
this.#publishingSettings = new PublishingSettings_1.PublishingSettings(options.namespace, this.clientId, this.endpoints, retryPolicy, this.requestTimeout, this.topics);
|
|
48
|
+
this.#checker = options.checker;
|
|
49
|
+
}
|
|
50
|
+
async startup() {
|
|
51
|
+
this.logger.info('Begin to start the rocketmq producer, clientId=%s', this.clientId);
|
|
52
|
+
await super.startup();
|
|
53
|
+
this.logger.info('The rocketmq producer starts successfully, clientId=%s', this.clientId);
|
|
54
|
+
}
|
|
55
|
+
async shutdown() {
|
|
56
|
+
this.logger.info('Begin to shutdown the rocketmq producer, clientId=%s', this.clientId);
|
|
57
|
+
await super.shutdown();
|
|
58
|
+
this.logger.info('Shutdown the rocketmq producer successfully, clientId=%s', this.clientId);
|
|
59
|
+
}
|
|
60
|
+
get publishingSettings() {
|
|
61
|
+
return this.#publishingSettings;
|
|
62
|
+
}
|
|
63
|
+
beginTransaction() {
|
|
64
|
+
assert(this.#checker, 'Transaction checker should not be null');
|
|
65
|
+
// Check producer status before beginning transaction
|
|
66
|
+
if (!this.isRunning()) {
|
|
67
|
+
this.logger.error('Unable to begin a transaction because producer is not running, clientId=%s', this.clientId);
|
|
68
|
+
throw new Error('Producer is not running now');
|
|
69
|
+
}
|
|
70
|
+
return new Transaction_1.Transaction(this);
|
|
71
|
+
}
|
|
72
|
+
async endTransaction(endpoints, message, messageId, transactionId, resolution, source = definition_pb_1.TransactionSource.SOURCE_CLIENT) {
|
|
73
|
+
const resolutionStr = resolution === definition_pb_1.TransactionResolution.COMMIT ? 'COMMIT' : 'ROLLBACK';
|
|
74
|
+
const sourceStr = definition_pb_1.TransactionSource[source];
|
|
75
|
+
this.logger.info('Begin to end transaction, messageId=%s, transactionId=%s, resolution=%s, source=%s, clientId=%s', messageId, transactionId, resolutionStr, sourceStr, this.clientId);
|
|
76
|
+
const request = new service_pb_1.EndTransactionRequest()
|
|
77
|
+
.setMessageId(messageId)
|
|
78
|
+
.setTransactionId(transactionId)
|
|
79
|
+
.setTopic((0, util_1.createResource)(message.topic).setResourceNamespace(this.namespace))
|
|
80
|
+
.setResolution(resolution)
|
|
81
|
+
.setSource(source);
|
|
82
|
+
const response = await this.rpcClientManager.endTransaction(endpoints, request, this.requestTimeout);
|
|
83
|
+
exception_1.StatusChecker.check(response.getStatus()?.toObject());
|
|
84
|
+
this.logger.info('End transaction successfully, messageId=%s, transactionId=%s, resolution=%s, source=%s, clientId=%s', messageId, transactionId, resolutionStr, sourceStr, this.clientId);
|
|
85
|
+
}
|
|
86
|
+
async onRecoverOrphanedTransactionCommand(endpoints, command) {
|
|
87
|
+
const transactionId = command.getTransactionId();
|
|
88
|
+
const messagePB = command.getMessage();
|
|
89
|
+
const messageId = messagePB.getSystemProperties().getMessageId();
|
|
90
|
+
if (!this.#checker) {
|
|
91
|
+
this.logger.error('No transaction checker registered, ignore it, messageId=%s, transactionId=%s, endpoints=%s, clientId=%s', messageId, transactionId, endpoints, this.clientId);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let messageView;
|
|
95
|
+
try {
|
|
96
|
+
messageView = new message_1.MessageView(messagePB);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
this.logger.error('[Bug] Failed to decode message during orphaned transaction message recovery, messageId=%s, transactionId=%s, endpoints=%s, clientId=%s, error=%s', messageId, transactionId, endpoints, this.clientId, err);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const resolution = await this.#checker.check(messageView);
|
|
104
|
+
if (resolution === null || resolution === definition_pb_1.TransactionResolution.TRANSACTION_RESOLUTION_UNSPECIFIED) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Use SOURCE_SERVER_CHECK for transaction recovery
|
|
108
|
+
await this.endTransaction(endpoints, messageView, messageId, transactionId, resolution, definition_pb_1.TransactionSource.SOURCE_SERVER_CHECK);
|
|
109
|
+
this.logger.info('Recover orphaned transaction message success, transactionId=%s, resolution=%s, messageId=%s, clientId=%s', transactionId, resolution, messageId, this.clientId);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
this.logger.error('Exception raised while checking the transaction, messageId=%s, transactionId=%s, endpoints=%s, clientId=%s, error=%s', messageId, transactionId, endpoints, this.clientId, err);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
getSettings() {
|
|
117
|
+
return this.#publishingSettings;
|
|
118
|
+
}
|
|
119
|
+
wrapHeartbeatRequest() {
|
|
120
|
+
return new service_pb_1.HeartbeatRequest()
|
|
121
|
+
.setClientType(definition_pb_1.ClientType.PRODUCER);
|
|
122
|
+
}
|
|
123
|
+
wrapNotifyClientTerminationRequest() {
|
|
124
|
+
return new service_pb_1.NotifyClientTerminationRequest();
|
|
125
|
+
}
|
|
126
|
+
async send(message, transaction) {
|
|
127
|
+
if (!transaction) {
|
|
128
|
+
const sendReceipts = await this.#send([message], false);
|
|
129
|
+
return sendReceipts[0];
|
|
130
|
+
}
|
|
131
|
+
// Send transactional message
|
|
132
|
+
try {
|
|
133
|
+
const publishingMessage = transaction.tryAddMessage(message);
|
|
134
|
+
const sendReceipts = await this.#send([message], true);
|
|
135
|
+
const sendReceipt = sendReceipts[0];
|
|
136
|
+
transaction.tryAddReceipt(publishingMessage, sendReceipt);
|
|
137
|
+
return sendReceipt;
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
this.logger.error('Failed to send transactional message, clientId=%s, error=%s', this.clientId, err);
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async #send(messages, txEnabled) {
|
|
145
|
+
// Check producer status before message publishing
|
|
146
|
+
if (!this.isRunning()) {
|
|
147
|
+
this.logger.error('Unable to send message because producer is not running, clientId=%s', this.clientId);
|
|
148
|
+
throw new Error('Producer is not running now');
|
|
149
|
+
}
|
|
150
|
+
const pubMessages = [];
|
|
151
|
+
const topics = new Set();
|
|
152
|
+
for (const message of messages) {
|
|
153
|
+
pubMessages.push(new message_1.PublishingMessage(message, this.#publishingSettings, txEnabled));
|
|
154
|
+
topics.add(message.topic);
|
|
155
|
+
}
|
|
156
|
+
if (topics.size > 1) {
|
|
157
|
+
throw new TypeError(`Messages to send have different topics=${JSON.stringify(Array.from(topics))}`);
|
|
158
|
+
}
|
|
159
|
+
const topic = pubMessages[0].topic;
|
|
160
|
+
const messageType = pubMessages[0].messageType;
|
|
161
|
+
const messageGroup = pubMessages[0].messageGroup;
|
|
162
|
+
const messageTypes = new Set(pubMessages.map(m => m.messageType));
|
|
163
|
+
if (messageTypes.size > 1) {
|
|
164
|
+
throw new TypeError(`Messages to send have different types=${JSON.stringify(Array.from(messageTypes))}`);
|
|
165
|
+
}
|
|
166
|
+
// Message group must be same if message type is FIFO, or no need to proceed.
|
|
167
|
+
if (messageType === definition_pb_1.MessageType.FIFO) {
|
|
168
|
+
const messageGroups = new Set(pubMessages.map(m => m.messageGroup));
|
|
169
|
+
if (messageGroups.size > 1) {
|
|
170
|
+
throw new TypeError(`FIFO messages to send have message groups, messageGroups=${JSON.stringify(Array.from(messageGroups))}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Get publishing topic route.
|
|
174
|
+
const loadBalancer = await this.#getPublishingLoadBalancer(topic);
|
|
175
|
+
// Prepare the candidate message queue(s) for retry-sending in advance.
|
|
176
|
+
const candidates = messageGroup ? [loadBalancer.takeMessageQueueByMessageGroup(messageGroup)] :
|
|
177
|
+
this.#takeMessageQueues(loadBalancer);
|
|
178
|
+
return await this.#send0(topic, messageType, candidates, pubMessages, 1);
|
|
179
|
+
}
|
|
180
|
+
#wrapSendMessageRequest(pubMessages, mq) {
|
|
181
|
+
const request = new service_pb_1.SendMessageRequest();
|
|
182
|
+
for (const pubMessage of pubMessages) {
|
|
183
|
+
if (this.namespace) {
|
|
184
|
+
request.addMessages(pubMessage.toProtobuf(this.namespace, mq));
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
request.addMessages(pubMessage.toProtobuf('', mq));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return request;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Isolate specified Endpoints
|
|
194
|
+
*/
|
|
195
|
+
#isolate(endpoints) {
|
|
196
|
+
this.isolated.set(endpoints.facade, endpoints);
|
|
197
|
+
}
|
|
198
|
+
async #send0(topic, messageType, candidates, messages, attempt) {
|
|
199
|
+
// Calculate the current message queue.
|
|
200
|
+
const index = (attempt - 1) % candidates.length;
|
|
201
|
+
const mq = candidates[index];
|
|
202
|
+
const acceptMessageTypes = mq.acceptMessageTypesList;
|
|
203
|
+
if (this.#publishingSettings.isValidateMessageType() && !acceptMessageTypes.includes(messageType)) {
|
|
204
|
+
throw new TypeError('Current message type not match with ' +
|
|
205
|
+
'topic accept message types, topic=' + topic + ', actualMessageType=' + messageType + ', ' +
|
|
206
|
+
'acceptMessageTypes=' + JSON.stringify(acceptMessageTypes));
|
|
207
|
+
}
|
|
208
|
+
const endpoints = mq.broker.endpoints;
|
|
209
|
+
const maxAttempts = this.#getRetryPolicy().getMaxAttempts();
|
|
210
|
+
const request = this.#wrapSendMessageRequest(messages, mq);
|
|
211
|
+
let sendReceipts = [];
|
|
212
|
+
try {
|
|
213
|
+
const response = await this.rpcClientManager.sendMessage(endpoints, request, this.requestTimeout);
|
|
214
|
+
sendReceipts = SendReceipt_1.SendReceipt.processResponseInvocation(mq, response);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
const messageIds = messages.map(m => m.messageId);
|
|
218
|
+
// Isolate endpoints because of sending failure
|
|
219
|
+
this.#isolate(endpoints);
|
|
220
|
+
if (attempt >= maxAttempts) {
|
|
221
|
+
// No more attempts
|
|
222
|
+
this.logger.error('Failed to send message(s) finally, run out of attempt times, maxAttempts=%d, attempt=%d, topic=%s, messageId(s)=%s, endpoints=%s, clientId=%s, error=%s', maxAttempts, attempt, topic, messageIds, endpoints, this.clientId, err);
|
|
223
|
+
throw err;
|
|
224
|
+
}
|
|
225
|
+
// No more attempts for transactional message
|
|
226
|
+
if (messageType === definition_pb_1.MessageType.TRANSACTION) {
|
|
227
|
+
this.logger.error('Failed to send transactional message finally, maxAttempts=%d, attempt=%d, topic=%s, messageId(s)=%s, endpoints=%s, clientId=%s, error=%s', maxAttempts, attempt, topic, messageIds, endpoints, this.clientId, err);
|
|
228
|
+
throw err;
|
|
229
|
+
}
|
|
230
|
+
// Try next attempt
|
|
231
|
+
const nextAttempt = 1 + attempt;
|
|
232
|
+
// Retry immediately if the request is not throttled
|
|
233
|
+
if (!(err instanceof exception_1.TooManyRequestsException)) {
|
|
234
|
+
this.logger.warn('Failed to send message, would attempt to resend right now, maxAttempts=%d, attempt=%d, topic=%s, messageId(s)=%s, endpoints=%s, clientId=%s, error=%s', maxAttempts, attempt, topic, messageIds, endpoints, this.clientId, err);
|
|
235
|
+
return this.#send0(topic, messageType, candidates, messages, nextAttempt);
|
|
236
|
+
}
|
|
237
|
+
const delay = this.#getRetryPolicy().getNextAttemptDelay(nextAttempt);
|
|
238
|
+
this.logger.warn('Failed to send message due to too many requests, would attempt to resend after %dms, maxAttempts=%d, attempt=%d, topic=%s, messageId(s)=%s, endpoints=%s, clientId=%s, error=%s', delay, maxAttempts, attempt, topic, messageIds, endpoints, this.clientId, err);
|
|
239
|
+
await (0, promises_1.setTimeout)(delay);
|
|
240
|
+
return this.#send0(topic, messageType, candidates, messages, nextAttempt);
|
|
241
|
+
}
|
|
242
|
+
// Resend message(s) successfully
|
|
243
|
+
if (attempt > 1) {
|
|
244
|
+
const messageIds = sendReceipts.map(r => r.messageId);
|
|
245
|
+
this.logger.info('Resend message successfully, topic=%s, messageId(s)=%s, maxAttempts=%d, attempt=%d, endpoints=%s, clientId=%s', topic, messageIds, maxAttempts, attempt, endpoints, this.clientId);
|
|
246
|
+
}
|
|
247
|
+
// Send message(s) successfully on first attempt, return directly
|
|
248
|
+
return sendReceipts;
|
|
249
|
+
}
|
|
250
|
+
async #getPublishingLoadBalancer(topic) {
|
|
251
|
+
let loadBalancer = this.#publishingRouteDataCache.get(topic);
|
|
252
|
+
if (!loadBalancer) {
|
|
253
|
+
const topicRouteData = await this.getRouteData(topic);
|
|
254
|
+
loadBalancer = this.#updatePublishingLoadBalancer(topic, topicRouteData);
|
|
255
|
+
}
|
|
256
|
+
return loadBalancer;
|
|
257
|
+
}
|
|
258
|
+
#updatePublishingLoadBalancer(topic, topicRouteData) {
|
|
259
|
+
let loadBalancer = this.#publishingRouteDataCache.get(topic);
|
|
260
|
+
if (loadBalancer) {
|
|
261
|
+
loadBalancer = loadBalancer.update(topicRouteData);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
loadBalancer = new PublishingLoadBalancer_1.PublishingLoadBalancer(topicRouteData);
|
|
265
|
+
}
|
|
266
|
+
this.#publishingRouteDataCache.set(topic, loadBalancer);
|
|
267
|
+
return loadBalancer;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Take message queue(s) from route for message publishing.
|
|
271
|
+
*/
|
|
272
|
+
#takeMessageQueues(loadBalancer) {
|
|
273
|
+
return loadBalancer.takeMessageQueues(this.isolated, this.#getRetryPolicy().getMaxAttempts());
|
|
274
|
+
}
|
|
275
|
+
#getRetryPolicy() {
|
|
276
|
+
return this.#publishingSettings.getRetryPolicy();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Recalls a scheduled/delayed message based on the topic and recall handle.
|
|
280
|
+
* This operation requires server support and can only be performed before the message is delivered.
|
|
281
|
+
*
|
|
282
|
+
* @param topic - The topic associated with the scheduled message to be canceled.
|
|
283
|
+
* @param recallHandle - A unique handle to identify the message to recall (obtained from SendReceipt).
|
|
284
|
+
* @returns Promise resolving to RecallReceipt containing the recalled message ID.
|
|
285
|
+
* @throws Error if producer is not running or recall handle is invalid.
|
|
286
|
+
*/
|
|
287
|
+
async recallMessage(topic, recallHandle) {
|
|
288
|
+
if (!this.isRunning()) {
|
|
289
|
+
this.logger.error('Unable to recall message because producer is not running, clientId=%s', this.clientId);
|
|
290
|
+
throw new Error('Producer is not running now');
|
|
291
|
+
}
|
|
292
|
+
if (!recallHandle) {
|
|
293
|
+
this.logger.error('Recall handle is invalid, clientId=%s', this.clientId);
|
|
294
|
+
throw new Error('Recall handle is invalid');
|
|
295
|
+
}
|
|
296
|
+
this.logger.info('Begin to recall message, topic=%s, recallHandle=%s, clientId=%s', topic, recallHandle, this.clientId);
|
|
297
|
+
const request = new service_pb_2.RecallMessageRequest()
|
|
298
|
+
.setTopic((0, util_1.createResource)(topic).setResourceNamespace(this.namespace))
|
|
299
|
+
.setRecallHandle(recallHandle);
|
|
300
|
+
const response = await this.rpcClientManager.recallMessage(this.endpoints, request, this.requestTimeout);
|
|
301
|
+
const status = response.getStatus();
|
|
302
|
+
if (!status) {
|
|
303
|
+
throw new Error('Recall message response status is null');
|
|
304
|
+
}
|
|
305
|
+
// Check status code
|
|
306
|
+
const statusCode = status.getCode();
|
|
307
|
+
if (statusCode !== definition_pb_1.Code.OK) {
|
|
308
|
+
const errorMessage = status.getMessage() || 'Unknown error';
|
|
309
|
+
throw new Error(`Failed to recall message: ${errorMessage} (code: ${statusCode})`);
|
|
310
|
+
}
|
|
311
|
+
const messageId = response.getMessageId();
|
|
312
|
+
const receipt = new RecallReceipt_1.RecallReceipt(messageId);
|
|
313
|
+
this.logger.info('Recall message successfully, topic=%s, recallHandle=%s, messageId=%s, clientId=%s', topic, recallHandle, messageId, this.clientId);
|
|
314
|
+
return receipt;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
exports.Producer = Producer;
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvZHVjZXIvUHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7O0FBRUgsc0NBQXVDO0FBQ3ZDLG1EQUFrRDtBQUNsRCxnRkFNc0Q7QUFDdEQsMEVBTW1EO0FBTW5ELG9DQUVrQjtBQUNsQiw0Q0FBdUU7QUFDdkUsc0NBQW9FO0FBQ3BFLHdDQUFxRjtBQUNyRiw2REFBMEQ7QUFFMUQscUVBQWtFO0FBQ2xFLCtDQUE0QztBQUM1QywrQ0FBNEM7QUFDNUMsa0NBQXlDO0FBQ3pDLG1EQUFnRDtBQUNoRCwwRUFBaUY7QUFRakYsTUFBYSxRQUFTLFNBQVEsbUJBQVU7SUFDdEMsbUJBQW1CLENBQXFCO0lBQ3hDLFFBQVEsQ0FBc0I7SUFDOUIseUJBQXlCLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFFdEUsWUFBWSxPQUF3QjtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFFLENBQUM7UUFDcEYsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLDBEQUEwRDtRQUMxRCxxREFBcUQ7UUFDckQsTUFBTSxXQUFXLEdBQUcscUNBQTZCLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFD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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
3
|
+
* contributor license agreements. See the NOTICE file distributed with
|
|
4
|
+
* this work for additional information regarding copyright ownership.
|
|
5
|
+
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
6
|
+
* (the "License"); you may not use this file except in compliance with
|
|
7
|
+
* the License. You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { Endpoints, MessageQueue, TopicRouteData } from '../route';
|
|
18
|
+
export declare class PublishingLoadBalancer {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(topicRouteData: TopicRouteData, index?: number);
|
|
21
|
+
update(topicRouteData: TopicRouteData): PublishingLoadBalancer;
|
|
22
|
+
takeMessageQueues(excluded: Map<string, Endpoints>, count: number): MessageQueue[];
|
|
23
|
+
takeMessageQueueByMessageGroup(messageGroup: string): MessageQueue;
|
|
24
|
+
}
|