The problem is:
1. I create a queue in activemq broker (version 5.11.1) and some message with string property, for example "filename".
2. Use a client to consume the message with message selector "filename='123.tar'" with consumer.receive(),it works. After it receive the message, it acks the message and send the same message back to the broker and commit the session. (client_acknowledge).
3. Use the same client, change the message selector to "filename='456.tar'" with consumer.receive(), the consumer is blocked.
4. restart the broker and consumer "filename='456.tar'" again, it successfully receive the message, but if i change the selector back to "filename='123.tar'", it blocked again.
At first I thought that there might be some rules for message dispatching. However, with ActiveMQ version 5.10.0, the problem is gone.