policyEntries, inheritance and wildcards

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

policyEntries, inheritance and wildcards

Johan Carlquist
Hi!
       
Our config:
=====

[...]
<policyEntries>
  <policyEntry queue=">" >
    <networkBridgeFilterFactory>
      <conditionalNetworkBridgeFilterFactory
        replayWhenNoConsumers="true"
      />
    </networkBridgeFilterFactory>
  </policyEntry>
  <policyEntry queue="just.another.queue">
    <deadLetterStrategy>
      <individualDeadLetterStrategy
        processExpired="true"
        processNonPersistent="true"
        queueSuffix=".DLQ"
        useQueueForQueueMessages="true"
      />
    </deadLetterStrategy>
  </policyEntry>
<policyEntries>
[...]

=====

So we have some queues; queue1, queue2 and so on. They all match the
first wildcard entry in the configuration and allows messages to jump
between our network of brokers even if they already been transfered from
the reciving broker already. (replayWhenNoConsumers="true")
Just as we want and expected.

Then we have this other queue, "just.another.queue" which requires some
more specific DLQ settings. But we still want the messages to been able
to jump between the brokers even if they have the reciving broker as
origin. This doesn't work. Our hope and exceptation was that the our
more queue specific entry would inheritance from the wildcard entry and
therfor allow messages jump freely. But the messages are stuck and TRACE
gives us "Message all ready routed once through target broker [...]".

Is this the way it should work? Is there any inheritance between
policies or is it most specific wins?

--
jocar

Reply | Threaded
Open this post in threaded view
|

Re: policyEntries, inheritance and wildcards

Tim Bain
I believe the semantics are first-match, not
merge-all-matches-overwriting-conflicts (e.g. how Spring loads properties)
and not merge-all-matches-not-overwriting-conflicts (e.g. how Ant loads
properties).

You could request the ability to select a different semantic (which would
require someone to implement any semantics other than first-match) through
a JIRA enhancement request, if you want that.  In the meantime, put your
more-specific match first and include all the content of the generic case
along with the things that are specific.

Tim
On Jun 10, 2016 2:54 AM, "Johan Carlquist" <[hidden email]> wrote:

Hi!

Our config:
=====

[...]
<policyEntries>
  <policyEntry queue=">" >
    <networkBridgeFilterFactory>
      <conditionalNetworkBridgeFilterFactory
        replayWhenNoConsumers="true"
      />
    </networkBridgeFilterFactory>
  </policyEntry>
  <policyEntry queue="just.another.queue">
    <deadLetterStrategy>
      <individualDeadLetterStrategy
        processExpired="true"
        processNonPersistent="true"
        queueSuffix=".DLQ"
        useQueueForQueueMessages="true"
      />
    </deadLetterStrategy>
  </policyEntry>
<policyEntries>
[...]

=====

So we have some queues; queue1, queue2 and so on. They all match the
first wildcard entry in the configuration and allows messages to jump
between our network of brokers even if they already been transfered from
the reciving broker already. (replayWhenNoConsumers="true")
Just as we want and expected.

Then we have this other queue, "just.another.queue" which requires some
more specific DLQ settings. But we still want the messages to been able
to jump between the brokers even if they have the reciving broker as
origin. This doesn't work. Our hope and exceptation was that the our
more queue specific entry would inheritance from the wildcard entry and
therfor allow messages jump freely. But the messages are stuck and TRACE
gives us "Message all ready routed once through target broker [...]".

Is this the way it should work? Is there any inheritance between
policies or is it most specific wins?

--
jocar
Reply | Threaded
Open this post in threaded view
|

Re: policyEntries, inheritance and wildcards

Tim Bain
Sorry, I just re-read your description of the behavior and clearly it's not
first-match as I had believed.  But I still believe that there are no
merging semantics available, so the solutions I described still apply
except for the statement that you need to reorder the list, which sounds
from your description like it should have no effect.
On Jun 11, 2016 9:38 AM, "Tim Bain" <[hidden email]> wrote:

> I believe the semantics are first-match, not
> merge-all-matches-overwriting-conflicts (e.g. how Spring loads properties)
> and not merge-all-matches-not-overwriting-conflicts (e.g. how Ant loads
> properties).
>
> You could request the ability to select a different semantic (which would
> require someone to implement any semantics other than first-match) through
> a JIRA enhancement request, if you want that.  In the meantime, put your
> more-specific match first and include all the content of the generic case
> along with the things that are specific.
>
> Tim
> On Jun 10, 2016 2:54 AM, "Johan Carlquist" <[hidden email]> wrote:
>
> Hi!
>
> Our config:
> =====
>
> [...]
> <policyEntries>
>   <policyEntry queue=">" >
>     <networkBridgeFilterFactory>
>       <conditionalNetworkBridgeFilterFactory
>         replayWhenNoConsumers="true"
>       />
>     </networkBridgeFilterFactory>
>   </policyEntry>
>   <policyEntry queue="just.another.queue">
>     <deadLetterStrategy>
>       <individualDeadLetterStrategy
>         processExpired="true"
>         processNonPersistent="true"
>         queueSuffix=".DLQ"
>         useQueueForQueueMessages="true"
>       />
>     </deadLetterStrategy>
>   </policyEntry>
> <policyEntries>
> [...]
>
> =====
>
> So we have some queues; queue1, queue2 and so on. They all match the
> first wildcard entry in the configuration and allows messages to jump
> between our network of brokers even if they already been transfered from
> the reciving broker already. (replayWhenNoConsumers="true")
> Just as we want and expected.
>
> Then we have this other queue, "just.another.queue" which requires some
> more specific DLQ settings. But we still want the messages to been able
> to jump between the brokers even if they have the reciving broker as
> origin. This doesn't work. Our hope and exceptation was that the our
> more queue specific entry would inheritance from the wildcard entry and
> therfor allow messages jump freely. But the messages are stuck and TRACE
> gives us "Message all ready routed once through target broker [...]".
>
> Is this the way it should work? Is there any inheritance between
> policies or is it most specific wins?
>
> --
> jocar
>
>
Reply | Threaded
Open this post in threaded view
|

Re: policyEntries, inheritance and wildcards

Johan Carlquist
Thanks for your reply.

It had been nice to avoid dublicated queue configuration so we will look
in to make an JIRA enhancement request for this later this
summer.

--
jocar

> On 11 Jun 2016, at 17:43, Tim Bain <[hidden email]> wrote:
>
> Sorry, I just re-read your description of the behavior and clearly it's not
> first-match as I had believed.  But I still believe that there are no
> merging semantics available, so the solutions I described still apply
> except for the statement that you need to reorder the list, which sounds
> from your description like it should have no effect.
> On Jun 11, 2016 9:38 AM, "Tim Bain" <[hidden email]> wrote:
>
>> I believe the semantics are first-match, not
>> merge-all-matches-overwriting-conflicts (e.g. how Spring loads properties)
>> and not merge-all-matches-not-overwriting-conflicts (e.g. how Ant loads
>> properties).
>>
>> You could request the ability to select a different semantic (which would
>> require someone to implement any semantics other than first-match) through
>> a JIRA enhancement request, if you want that.  In the meantime, put your
>> more-specific match first and include all the content of the generic case
>> along with the things that are specific.
>>
>> Tim
>> On Jun 10, 2016 2:54 AM, "Johan Carlquist" <[hidden email]> wrote:
>>
>> Hi!
>>
>> Our config:
>> =====
>>
>> [...]
>> <policyEntries>
>>  <policyEntry queue=">" >
>>    <networkBridgeFilterFactory>
>>      <conditionalNetworkBridgeFilterFactory
>>        replayWhenNoConsumers="true"
>>      />
>>    </networkBridgeFilterFactory>
>>  </policyEntry>
>>  <policyEntry queue="just.another.queue">
>>    <deadLetterStrategy>
>>      <individualDeadLetterStrategy
>>        processExpired="true"
>>        processNonPersistent="true"
>>        queueSuffix=".DLQ"
>>        useQueueForQueueMessages="true"
>>      />
>>    </deadLetterStrategy>
>>  </policyEntry>
>> <policyEntries>
>> [...]
>>
>> =====
>>
>> So we have some queues; queue1, queue2 and so on. They all match the
>> first wildcard entry in the configuration and allows messages to jump
>> between our network of brokers even if they already been transfered from
>> the reciving broker already. (replayWhenNoConsumers="true")
>> Just as we want and expected.
>>
>> Then we have this other queue, "just.another.queue" which requires some
>> more specific DLQ settings. But we still want the messages to been able
>> to jump between the brokers even if they have the reciving broker as
>> origin. This doesn't work. Our hope and exceptation was that the our
>> more queue specific entry would inheritance from the wildcard entry and
>> therfor allow messages jump freely. But the messages are stuck and TRACE
>> gives us "Message all ready routed once through target broker [...]".
>>
>> Is this the way it should work? Is there any inheritance between
>> policies or is it most specific wins?
>>
>> --
>> jocar

Reply | Threaded
Open this post in threaded view
|

Re: policyEntries, inheritance and wildcards

christopher.l.shannon
Right, there is no inheritance between policies or merging semantics as Tim
pointed out.  So if you define a new policy then you need to re-apply all
the settings you want to the new policy as well.

On Fri, Jun 17, 2016 at 9:09 AM, Johan Carlquist <[hidden email]> wrote:

> Thanks for your reply.
>
> It had been nice to avoid dublicated queue configuration so we will look
> in to make an JIRA enhancement request for this later this
> summer.
>
> --
> jocar
>
> > On 11 Jun 2016, at 17:43, Tim Bain <[hidden email]> wrote:
> >
> > Sorry, I just re-read your description of the behavior and clearly it's
> not
> > first-match as I had believed.  But I still believe that there are no
> > merging semantics available, so the solutions I described still apply
> > except for the statement that you need to reorder the list, which sounds
> > from your description like it should have no effect.
> > On Jun 11, 2016 9:38 AM, "Tim Bain" <[hidden email]> wrote:
> >
> >> I believe the semantics are first-match, not
> >> merge-all-matches-overwriting-conflicts (e.g. how Spring loads
> properties)
> >> and not merge-all-matches-not-overwriting-conflicts (e.g. how Ant loads
> >> properties).
> >>
> >> You could request the ability to select a different semantic (which
> would
> >> require someone to implement any semantics other than first-match)
> through
> >> a JIRA enhancement request, if you want that.  In the meantime, put your
> >> more-specific match first and include all the content of the generic
> case
> >> along with the things that are specific.
> >>
> >> Tim
> >> On Jun 10, 2016 2:54 AM, "Johan Carlquist" <[hidden email]> wrote:
> >>
> >> Hi!
> >>
> >> Our config:
> >> =====
> >>
> >> [...]
> >> <policyEntries>
> >>  <policyEntry queue=">" >
> >>    <networkBridgeFilterFactory>
> >>      <conditionalNetworkBridgeFilterFactory
> >>        replayWhenNoConsumers="true"
> >>      />
> >>    </networkBridgeFilterFactory>
> >>  </policyEntry>
> >>  <policyEntry queue="just.another.queue">
> >>    <deadLetterStrategy>
> >>      <individualDeadLetterStrategy
> >>        processExpired="true"
> >>        processNonPersistent="true"
> >>        queueSuffix=".DLQ"
> >>        useQueueForQueueMessages="true"
> >>      />
> >>    </deadLetterStrategy>
> >>  </policyEntry>
> >> <policyEntries>
> >> [...]
> >>
> >> =====
> >>
> >> So we have some queues; queue1, queue2 and so on. They all match the
> >> first wildcard entry in the configuration and allows messages to jump
> >> between our network of brokers even if they already been transfered from
> >> the reciving broker already. (replayWhenNoConsumers="true")
> >> Just as we want and expected.
> >>
> >> Then we have this other queue, "just.another.queue" which requires some
> >> more specific DLQ settings. But we still want the messages to been able
> >> to jump between the brokers even if they have the reciving broker as
> >> origin. This doesn't work. Our hope and exceptation was that the our
> >> more queue specific entry would inheritance from the wildcard entry and
> >> therfor allow messages jump freely. But the messages are stuck and TRACE
> >> gives us "Message all ready routed once through target broker [...]".
> >>
> >> Is this the way it should work? Is there any inheritance between
> >> policies or is it most specific wins?
> >>
> >> --
> >> jocar
>
>