You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/04/12 17:04:55 UTC
[camel] branch camel-3.11.x updated: CAMEL-17912: camel-sjms - Add preserveMessageQos code in producer which was missing (copy from camel-jms)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-3.11.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.11.x by this push:
new 8e35965f0a5 CAMEL-17912: camel-sjms - Add preserveMessageQos code in producer which was missing (copy from camel-jms)
8e35965f0a5 is described below
commit 8e35965f0a5a4308519350fefc433bfff0fdaaa9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Apr 12 19:03:46 2022 +0200
CAMEL-17912: camel-sjms - Add preserveMessageQos code in producer which was missing (copy from camel-jms)
---
.../apache/camel/component/sjms/SjmsEndpoint.java | 1 +
.../apache/camel/component/sjms/SjmsTemplate.java | 40 +++++++++++++++++++++-
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
index 693d3725bf2..dd9d265a090 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
@@ -406,6 +406,7 @@ public class SjmsEndpoint extends DefaultEndpoint
}
}
template.setDestinationCreationStrategy(getDestinationCreationStrategy());
+ template.setPreserveMessageQos(isPreserveMessageQos());
return template;
}
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
index 701902ca062..4178f25a31a 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
@@ -27,6 +27,8 @@ import javax.jms.Session;
import org.apache.camel.Exchange;
import org.apache.camel.ExtendedExchange;
import org.apache.camel.component.sjms.jms.DestinationCreationStrategy;
+import org.apache.camel.component.sjms.jms.JmsConstants;
+import org.apache.camel.component.sjms.jms.JmsMessageHelper;
import org.apache.camel.component.sjms.jms.MessageCreator;
import org.apache.camel.util.ObjectHelper;
@@ -39,6 +41,7 @@ public class SjmsTemplate {
private final int acknowledgeMode;
private DestinationCreationStrategy destinationCreationStrategy;
+ private boolean preserveMessageQos;
private boolean explicitQosEnabled;
private int deliveryMode = Message.DEFAULT_DELIVERY_MODE;
private int priority = Message.DEFAULT_PRIORITY;
@@ -79,6 +82,10 @@ public class SjmsTemplate {
this.explicitQosEnabled = explicitQosEnabled;
}
+ public void setPreserveMessageQos(boolean preserveMessageQos) {
+ this.preserveMessageQos = preserveMessageQos;
+ }
+
public Object execute(SessionCallback sessionCallback, boolean startConnection) throws Exception {
Connection con = null;
Session session = null;
@@ -159,7 +166,38 @@ public class SjmsTemplate {
}
public void send(MessageProducer producer, Message message) throws Exception {
- if (explicitQosEnabled) {
+ if (preserveMessageQos) {
+ long ttl = message.getJMSExpiration();
+ if (ttl != 0) {
+ ttl = ttl - System.currentTimeMillis();
+ // Message had expired.. so set the ttl as small as possible
+ if (ttl <= 0) {
+ ttl = 1;
+ }
+ }
+
+ int priority = message.getJMSPriority();
+ if (priority < 0 || priority > 9) {
+ // use priority from endpoint if not provided on message with a valid range
+ priority = this.priority;
+ }
+
+ // if a delivery mode was set as a JMS header then we have used a temporary
+ // property to store it - CamelJMSDeliveryMode. Otherwise we could not keep
+ // track whether it was set or not as getJMSDeliveryMode() will default return 1 regardless
+ // if it was set or not, so we can never tell if end user provided it in a header
+ int deliveryMode;
+ if (JmsMessageHelper.hasProperty(message, JmsConstants.JMS_DELIVERY_MODE)) {
+ deliveryMode = message.getIntProperty(JmsConstants.JMS_DELIVERY_MODE);
+ // remove the temporary property
+ JmsMessageHelper.removeJmsProperty(message, JmsConstants.JMS_DELIVERY_MODE);
+ } else {
+ // use the existing delivery mode from the message
+ deliveryMode = message.getJMSDeliveryMode();
+ }
+
+ producer.send(message, deliveryMode, priority, ttl);
+ } else if (explicitQosEnabled) {
producer.send(message, deliveryMode, priority, timeToLive);
} else {
producer.send(message);