More of a note for future on the users list, perhaps not worth
splitting the thread now, the folks working on these bits may yet see
it here. Alternatively you could raise a JIRA if you believe there is
a change to be made.

On Thu, 3 Feb 2022 at 09:49, Endre Stølsvik <en...@stolsvik.com> wrote:
>
> You are totally correct, sorry about that. I actually find the JMS API a
> tad convoluted. Since I do actually change the delivery mode per message in
> my library, I knew it was possible, and was like "ah, there it is" when I
> found that setter on the message.
>
> When changing to using 'producer.send(msg, deliveryMode, pri, ttl)', that
> "further finding" disappears! Great.
>
> The original and main point still seems to stand though. If you want me to
> send that to the user list then I'll do that.
>
> I've updated the repo.
>
> Each test is time for sending and in case of 'Transactional', committing,
> [1000] messages
> no store, non-Transactional, non-Persistent:   [4.36516976] ms
> no store, non-Transactional, Persistent:   [27.665534] ms
> no store, Transactional, non-Persistent:   [29.056998] ms
> no store, Transactional, Persistent:   [30.520276] ms
> ALWAYS, non-Transactional, non-Persistent:   [4.41806886] ms  <-- (This is
> great, avoiding the hit.)
> ALWAYS, non-Transactional, Persistent:   [4107.414315] ms
> ALWAYS, Transactional, non-Persistent:   [4118.322262] ms     <-- This one
> is unfortunate!
> ALWAYS, Transactional, Persistent:   [4143.173852] ms
> PERIODIC, non-Transactional, non-Persistent:   [4.453423] ms
> PERIODIC, non-Transactional, Persistent:   [58.694872] ms
> PERIODIC, Transactional, non-Persistent:   [28.286106] ms
> PERIODIC, Transactional, Persistent:   [64.690608] ms
>
>
>
> On Tue, Feb 1, 2022 at 7:22 PM Robbie Gemmell <robbie.gemm...@gmail.com>
> wrote:
>
> > You should post such things to the users list.
> >
> > Your further finding is not as interesting as it may first seem, it
> > makes an invalid assumption that you get 'semantically exactly the
> > same messages sent' by using the jmsMessage.setJMSDeliveryMode(..)
> > method, which JMS defines that you do not. This method (and several
> > others like it) is specifically not meant for application usage and
> > actually shouldnt have any influence on what happens during send. It
> > is only for use by a JMS implementation itself to stamp the actual
> > details for observation after send returns, and exist to allow for the
> > case when it is operating on message objects created by another JMS
> > implementation. Only the producer's own setting or its send method
> > override argument has influence on the deliveryMode when sending.
> >
> >
> > https://docs.oracle.com/javaee/7/api/javax/jms/Message.html#setJMSDeliveryMode-int-
> >
> > setJMSDeliveryMode(int deliveryMode)
> > Sets the DeliveryMode value for this message.
> >
> > This method is for use by JMS providers only to set this field when a
> > message is sent. This message cannot be used by clients to configure
> > the delivery mode of the message. This method is public to allow a JMS
> > provider to set this field when sending a message whose implementation
> > is not its own.
> >
> >
> > On Sat, 29 Jan 2022 at 14:20, Endre Stølsvik <en...@stolsvik.com> wrote:
> > >
> > > Further interesting finding:
> > > Only the jmsProducer.setDeliveryMode(..) have any effect on the timing:
> > If
> > > employing the jmsMessage.setJMSDeliveryMode(..) method to get
> > semantically
> > > exactly the same messages sent with same DeliveryMode (that is,
> > PERSISTENT
> > > vs. NON_PERSISTENT), you lose out on those blazing fast
> > "non-Transactional,
> > > non-Persistent" timings.
> > >
> > > Each test is time for sending and in case of 'Transactional', committing,
> > > [1000] messages
> > > no store, non-Transactional, non-Persistent:   [32.237903] ms   <- This
> > is
> > > no longer superfast
> > > no store, non-Transactional, Persistent:   [27.756596] ms
> > > no store, Transactional, non-Persistent:   [37.082023] ms
> > > no store, Transactional, Persistent:   [35.110782] ms
> > > ALWAYS, non-Transactional, non-Persistent:   [4108.457421] ms   <- ...
> > and
> > > neither this
> > > ALWAYS, non-Transactional, Persistent:   [4102.393857] ms
> > > ALWAYS, Transactional, non-Persistent:   [3954.603762] ms
> > > ALWAYS, Transactional, Persistent:   [3978.435732] ms
> > > PERIODIC, non-Transactional, non-Persistent:   [58.224914] ms   <- .. nor
> > > this
> > > PERIODIC, non-Transactional, Persistent:   [81.982655] ms
> > > PERIODIC, Transactional, non-Persistent:   [67.837032] ms
> > > PERIODIC, Transactional, Persistent:   [58.78441] ms
> > >
> > > On Sat, Jan 29, 2022 at 4:26 AM Endre Stølsvik <en...@stolsvik.com>
> > wrote:
> > >
> > > > Hi!
> > > >
> > > > I observed a performance/timing situation that I found a bit
> > surprising,
> > > > and made a little test for it. You may find that here:
> > > > https://github.com/stolsvik/activemq_perf_issue
> > > >
> > > > When running ActiveMQ with default config, it uses KahaDB as backend
> > with
> > > > JournalDiskSyncStrategy.ALWAYS which flushes to disk after every
> > > > operation. This is to live up to the JMS promises of persistent
> > messaging
> > > > where operations should actually have been stored to disk when e.g.
> > > > producer.send() or session.commit() returns.
> > > >
> > > > This constant flushing gives a very heavy performance impact, and one
> > > > should really consider the pros and cons of using PERIODIC instead.
> > > >
> > > > However, I was a bit surprised by an observation: If you run the JMS
> > > > Session in Transactional mode, but also do
> > > > producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT), one might
> > believe
> > > > that there wouldn't be a need to flush the disk, as one has
> > specifically
> > > > told the system that "this doesn't really matter". However, the
> > performance
> > > > impact from "Transactional, non-Persistent" is just as heavy as with
> > > > non-Transactional+Persistent and Transactional+Persistent.
> > > >
> > > > With non-Transactional + non-Persistent, even with
> > > > JournalDiskSyncStrategy.ALWAYS, the speed is blazing.
> > > >
> > > > One might argue, well don't use Transactional then. But Transactional
> > also
> > > > brings another feature, whereby you may receive a message, and send a
> > > > message, and have these two operations inside a transactional boundary.
> > > > This aspect of Transactional is valuable even if though the messages
> > are
> > > > non-Persistent. And the broker evidently handles this logic already
> > even
> > > > without persistence, since if you say
> > BrokerService.setPersistent(false)
> > > > and thus turn off the entire storage of the broker, it still handles
> > this
> > > > aspect of Transactional messaging.
> > > >
> > > > It would have been valuable to be able to "selectively" turn off this
> > > > pretty massive hit of flushing to disk if the messages inside the
> > > > Transaction was non-Persistent.
> > > >
> > > > Note: The Java class in this repo uses an in-vm broker, with the
> > "vm://"
> > > > connection. However, this situation was first observed with a remote
> > > > broker, so the effects of interest are the same over TCP or over VM.
> > > >
> > > >  Each test is time for sending and in case of 'Transactional',
> > committing, [1000] messages
> > > >
> > > >  no store, non-Transactional, non-Persistent:   [4.26321216] ms
> > > >  no store, non-Transactional, Persistent:   [26.784713] ms
> > > >  no store, Transactional, non-Persistent:   [32.404009] ms
> > > >  no store, Transactional, Persistent:   [46.314925] ms
> > > >  ALWAYS, non-Transactional, non-Persistent:   [3.9833712400000003] ms
> > > >  ALWAYS, non-Transactional, Persistent:   [4235.887625] ms
> > > >  ALWAYS, Transactional, non-Persistent:   [4040.549101] ms    <-- This
> > one is unfortunate!
> > > >  ALWAYS, Transactional, Persistent:   [3902.525469] ms
> > > >  PERIODIC, non-Transactional, non-Persistent:   [3.85038125] ms
> > > >  PERIODIC, non-Transactional, Persistent:   [78.012904] ms
> > > >  PERIODIC, Transactional, non-Persistent:   [39.030052] ms
> > > >  PERIODIC, Transactional, Persistent:   [94.339609] ms
> > > >
> > > >
> > > >
> >

Reply via email to