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

ASF GitHub Bot commented on NIFI-3983:
--------------------------------------

Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/1863#discussion_r124441093
  
    --- Diff: 
nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/processors/ConsumeJMS.java
 ---
    @@ -86,6 +86,31 @@
                 .defaultValue(CLIENT_ACK.getValue())
                 .build();
     
    +    static final PropertyDescriptor DURABLE_SUBSCRIBER = new 
PropertyDescriptor.Builder()
    +                                                             
.name("Durable subscription")
    +                                                             
.description("If destination is Topic if present then make it the consumer 
durable. " +
    +                                                                          
"@see 
https://docs.oracle.com/javaee/7/api/javax/jms/Session.html#createDurableConsumer-javax.jms.Topic-java.lang.String-";)
    +                                                             
.required(false)
    +                                                             
.expressionLanguageSupported(true)
    +                                                             
.defaultValue("true")
    --- End diff --
    
    I'm testing these new properties with Active MQ. With durable subscription 
enabled, I got following error:
    
    ```
    Caused by: javax.jms.JMSException: You cannot create a durable subscriber 
without specifying a unique clientID on a Connection
            at 
org.apache.activemq.ActiveMQConnection.checkClientIDWasManuallySpecified(ActiveMQConnection.java:1288)
            at 
org.apache.activemq.ActiveMQSession.createDurableSubscriber(ActiveMQSession.java:1467)
            at 
org.springframework.jms.connection.CachingConnectionFactory$CachedSessionInvocationHandler.getCachedConsumer(CachingConnectionFactory.java:442)
            at 
org.springframework.jms.connection.CachingConnectionFactory$CachedSessionInvocationHandler.invoke(CachingConnectionFactory.java:356)
            at com.sun.proxy.$Proxy84.createDurableConsumer(Unknown Source)
            at 
org.apache.nifi.jms.processors.JMSConsumer$1.doInJms(JMSConsumer.java:87)
            at 
org.apache.nifi.jms.processors.JMSConsumer$1.doInJms(JMSConsumer.java:65)
            at 
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
            ... 16 common frames omitted
    ```
    
    I think we need to set unique client id at each processor. Probably at 
AbstractJMSProcessor.java
    
https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/processors/AbstractJMSProcessor.java#L198
    
    ```
    // Need to add something like this:
    this.cachingConnectionFactory.setClientId("some-unique-id");
    ```
    
    I'm wondering if client id can be the same value with subscription name... 
I will research on this a bit more, but do you have any idea?


> Support ability to make JMS 2.0 durable subscriptions on Topic
> --------------------------------------------------------------
>
>                 Key: NIFI-3983
>                 URL: https://issues.apache.org/jira/browse/NIFI-3983
>             Project: Apache NiFi
>          Issue Type: Improvement
>            Reporter: Michael Andre Pearce
>
> Currently the jms consumer, only supports standard queue consumption and 
> topic subscription. For topics, in JMS 2.0 you can make shared durable 
> subscribers which gives a subscription semantic similar to queue per 
> subscription name, meaning message is delivered once per subscription. This 
> is very useful in setups using JMS 2.0.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to