Hi,

It is an optimization, that runs operations which could be executed
locally, in user thread. The same will work for cache operations too.

First of all, do you really need to send a message to all nodes, including
the local? You can send the message to the remote nodes only, it will
automatically resolve your problem.

Additionally, you can create a different thread for such kind of operations
and invoke sending from this pool.

Evgenii

ср, 21 нояб. 2018 г. в 03:06, Bob Newcomer <b...@badte.ch>:

> Hello, would it be useful if I provided a test-case to help explain the
> situation?
>
>
> On Sat, Nov 17, 2018, at 11:27 AM, Bob Newcomer wrote:
>
> Hello,
>
> I have a distributed app that has an ignite client instance connected to a
> grid. Every app registers for the same topic and uses it to broadcast
> information to its peers and itself to perform async work in the ignite
> thread pool. The handler for this topic may take several minutes to perform
> its job, but I thought this would be OK because the docs for sendOrdered
> say:
>
> Note that local listeners are always executed in public thread pool, no
> matter default or withAsync()
> <https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteMessaging.html#withAsync-->
> mode is used. [1]
>
> [1] -
> https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteMessaging.html#sendOrdered-java.lang.Object-java.lang.Object-long-
>
> However, in my testing when I send to the whole cluster, the message sent
> to the local listener (the message topic handler registered in the same
> ignite client instance as the one sending) gets handled in the same thread
> as sendOrdered() and blocks the sendOrdered() until it has been completed.
>
> I had a look through the code and could not see an obvious way to make the
> local handler happen on an ignite thread pool instead of blocking the
> sender. How can I make the local handler get called in an ignite thread
> pool?
>
> Appreciate any assistance.
>
>
>

Reply via email to