[ 
https://issues.apache.org/jira/browse/NIFI-6721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17046950#comment-17046950
 ] 

Tim Chermak commented on NIFI-6721:
-----------------------------------

Message from our developer/user:

JMSTemplate shouldn't have setExpiration because that is one of the fields that 
a user can't set directly. The user should call setTimeToLive, and the provider 
client library will set the expiration based on the timeToLive (TTL). The real 
problem is explained earlier.

The documentation for PublishJMS says that the JMSExpiration is set with the 
attribute jms_expiration. However, this value is really time-to-live in 
milliseconds. The JMSExpiration is calculated by the provider client library 
as; expiration = timestamp + ttl

So, this nifi flowfile attribute really be named jms_ttl

Change the name of the flowfile attribute to jms_ttl, and pass that to 
setTimeToLive. This works for messages published by NiFi, but for messages 
received by NiFi, you have to recalculate the TTL.

jms_ttl = expiration - timestamp

Since there may be delays in processing the message, it may be better to use 
the current time

jsm_ttl = expiration - now()

You want to set the jms_expiration attribute of a flowfile with the value in 
the JMS message, and you want to add the flowfile attribute jms_ttl as 
calculated above.

> jms_expiration attribute problem
> --------------------------------
>
>                 Key: NIFI-6721
>                 URL: https://issues.apache.org/jira/browse/NIFI-6721
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Extensions
>    Affects Versions: 1.8.0
>         Environment: Linux CENTOS 7
>            Reporter: Tim Chermak
>            Priority: Minor
>
> The documentation for PublishJMS indicates the JMSExpiration is set with the 
> attribute jms_expiration. However, this value is really the time-to-live 
> (ttl) in milliseconds. The JMSExpiration is calculated by the provider 
> library as "expiration = timestamp + ttl"
> So, this NiFi flowfile attribute should really be named jms_ttl. The current 
> setup works correctly when NiFi creates and publishes a message, but has 
> problems when you try to republish a JMS message.
> GetFile -> UpdateAttibute -> PublishJMS creates a valid JMSExpiration in the 
> message, however, when a JMS has the expiration set, ConsumeJMS -> PublishJMS 
> shows an error in the nifi.--app.log file: 
> "o.apache.nifi.jms.processors.PublishJMS PublishJMS[id=016b1005-xxxxxx...] 
> Incompatible value for attribute jms_expiration [1566428032803] is not a 
> number. Ignoring this attribute."
> Looks like ConsumeJMS set the flowfile attribute to the expiration value 
> rather than the time-ti-live value. Time-to-live should be jms_ttl = 
> expiration - current_time.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to