This is an automated email from the ASF dual-hosted git repository.

brusdev pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis-console.git


The following commit(s) were added to refs/heads/main by this push:
     new 83e1187  ARTEMIS-5548 - fix adding back the retry for dlq and expiry
83e1187 is described below

commit 83e1187abc6b062d66e44ac90744acadfd4e5289
Author: Andy Taylor <[email protected]>
AuthorDate: Fri Sep 12 16:05:02 2025 +0100

    ARTEMIS-5548 - fix adding back the retry for dlq and expiry
---
 .../artemis-console-plugin/src/artemis-service.ts  |  5 ++
 .../src/messages/MessagesTable.tsx                 | 64 ++++++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
index cef014b..08c653f 100644
--- 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
+++ 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
@@ -124,6 +124,7 @@ const DELETE_ADDRESS_SIG = 
"deleteAddress(java.lang.String)";
 const DELETE_MESSAGE_SIG = "removeMessage(long)";
 const MOVE_MESSAGE_SIG = "moveMessage(long,java.lang.String)";
 const COPY_MESSAGE_SIG = "copyMessage(long,java.lang.String)";
+const RETRY_MESSAGE_SIG = "retryMessage(long)";
 const CREATE_QUEUE_SIG = "createQueue(java.lang.String,boolean)"
 const CREATE_ADDRESS_SIG = "createAddress(java.lang.String,java.lang.String)"
 const COUNT_MESSAGES_SIG = "countMessages()";
@@ -335,6 +336,10 @@ class ArtemisService {
         return jolokiaService.execute(mbean, COPY_MESSAGE_SIG, [id, 
targetQueue])
     }
 
+     async retryMessage(id: number, address: string, routingType: string, 
queue: string) {
+        const mbean = createQueueObjectName(await this.getBrokerObjectName(), 
address, routingType, queue);
+        return jolokiaService.execute(mbean, RETRY_MESSAGE_SIG, [id])
+    }
 
     async createQueue(queueConfiguration: string) {
         return await jolokiaService.execute(await this.getBrokerObjectName(), 
CREATE_QUEUE_SIG, [queueConfiguration, false]).then().catch() as string;
diff --git 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/messages/MessagesTable.tsx
 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/messages/MessagesTable.tsx
index 12b2a39..d63739d 100644
--- 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/messages/MessagesTable.tsx
+++ 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/messages/MessagesTable.tsx
@@ -75,6 +75,7 @@ export const MessagesTable: 
React.FunctionComponent<MessageProps> = props => {
   const [showDeleteMessagesModal, setShowDeleteMessagesModal] = 
useState(false);
   const [showMoveMessagesModal, setShowMoveMessagesModal] = useState(false);
   const [showCopyMessagesModal, setShowCopyMessagesModal] = useState(false);
+  const [showRetryMessagesModal, setShowRetryMessagesModal] = useState(false);
   const [showResendModal, setShowResendModal] = useState(false);
   const [ resendMessage, setResendMessage] = useState<Message | undefined>();
 
@@ -213,6 +214,8 @@ export const MessagesTable: 
React.FunctionComponent<MessageProps> = props => {
 
   const doesCopyMessagemethodExist = 
artemisService.doesMethodExist(brokerNode, props.queue, "copyMessage");
 
+  const isRetryQueue = 
props.queue.match(artemisPreferencesService.loadArtemisPreferences().artemisDLQ)
 || 
props.queue.match(artemisPreferencesService.loadArtemisPreferences().artemisExpiryQueue);
+
   if(!doesCopyMessagemethodExist) {
     log.warn("Copy button method not available in this version of Artemis");
     
@@ -318,6 +321,35 @@ export const MessagesTable: 
React.FunctionComponent<MessageProps> = props => {
     setSelectedMessages([]);
   }
 
+  const handleRetryMessages = () => {
+
+    const isRejected = <T,>(p: PromiseSettledResult<T>): p is 
PromiseRejectedResult => p.status === 'rejected';
+    var results: Promise<unknown>[] = [];
+    for (let i = 0; i < selectedMessages.length; i++) {
+      var promise: Promise<unknown> = 
artemisService.retryMessage(selectedMessages[i], props.address, 
props.routingType, props.queue);
+      results.push(promise);
+    };
+    Promise.allSettled(results)
+      .then((results) => {
+        const rejectedReasons = results.filter(isRejected).map(p => p.reason);
+
+        if (rejectedReasons.length > 0) {
+          eventService.notify({
+            type: 'warning',
+            message: "not all messages retried: errors " + 
rejectedReasons.toString(),
+          })
+        } else {
+          eventService.notify({
+            type: 'success',
+            message: "Messages Successfully Retried [" + selectedMessages + 
"]",
+          })
+        }
+      });
+
+    setShowRetryMessagesModal(false);
+    setSelectedMessages([]);
+  }
+
   return (
     <React.Fragment>
       <Toolbar id="toolbar">
@@ -350,6 +382,11 @@ export const MessagesTable: 
React.FunctionComponent<MessageProps> = props => {
           <ToolbarItem>
             <Button onClick={() => setShowCopyMessagesModal(true)} 
isDisabled={!doesCopyMessagemethodExist} >Copy</Button>
           </ToolbarItem>
+          { isRetryQueue &&
+            <ToolbarItem>
+              <Button onClick={() => 
setShowRetryMessagesModal(true)}>Retry</Button>
+            </ToolbarItem>
+          }
           <ToolbarItem>
             <Button variant='link' onClick={handleColumnsModalToggle} >Manage 
Columns</Button>
           </ToolbarItem>
@@ -505,6 +542,33 @@ export const MessagesTable: 
React.FunctionComponent<MessageProps> = props => {
           <QueueSelectInput selectQueue={setSelectedTargetQueue}/>
         </TextContent>
       </Modal>
+      <Modal
+        aria-label='retry-messagse-modal'
+        variant={ModalVariant.medium}
+        isOpen={showRetryMessagesModal}
+        actions={[
+          <Button key="cancel" variant="secondary" onClick={() => 
setShowRetryMessagesModal(false)}>
+            Cancel
+          </Button>,
+          <Button key="copy" variant="primary" onClick={handleRetryMessages}>
+            Confirm
+          </Button>
+        ]}>
+        <TextContent>
+          <Text component="h2">
+            Confirm Retry Message(s)
+          </Text>
+          <Text component="p">
+            <Icon isInline status='warning'>
+              <ExclamationCircleIcon />
+            </Icon>
+            You are about to retry messages {selectedMessages.toString()}
+          </Text>
+          <Text component="p">
+            This operation cannot be undone so please be careful.
+          </Text>
+        </TextContent>
+      </Modal>
       <Modal
         title="Resend Message"
         isOpen={showResendModal}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to