Github user gaohoward commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2371#discussion_r225353155
--- Diff:
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
---
@@ -1789,6 +1790,11 @@ public synchronized RoutingStatus doSend(final
Transaction tx,
AddressInfo art = getAddressAndRoutingType(new
AddressInfo(msg.getAddressSimpleString(), routingType));
+ if (postOffice.isAddressBlocked(msg.getAddressSimpleString())) {
--- End diff --
@clebertsuconic reply here.
I can think of 2 difficulties using credits:
1. Some clients (like mqtt, stomp) are not supporting flow control so they
can't be blocked using credits.
2. producers are not necessarily bound to one address, they can send
messages to different addresses (for example one producer can send one message
to address1, and the next one to address2. It it's blocked on address1, the
next message also be blocked)
If we simply block the sending threads, it will holding up broker threads
(like you said OME). Besides the producer may have call-timeout exception.
By throwing a proper exception we can let client to handle their producer
properly without blocking any thing.
---