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.



---

Reply via email to