Github user mtaylor commented on the issue: https://github.com/apache/activemq-artemis/pull/1775 @jostbg The point is, if you want the broker to create something for you, then the broker needs to know what to create. I used JMS clients as an example as they are usually specific about what they want, the same thing can happen in other protocols. In the JMS case the client sends the broker the information it needs to create the appropriate queue with some additional bits of info. The JMS client doesn't say, hey I want a durable queue with these properties (except the CORE client as it's tied to the Artemis implementation). Instead, say the QPID AMQP client says, hey I want a JMS Durable Subscription. It does this by setting some special JMS AMQP properties. The AMQP protocol handler reads these properties and decides how to interpret them. In some cases these get translated to durable queues, in others they are translated to non-durable queues. Artemis has a underlying model that is protocol agnostic, so things are translated from API/protocol specifics down to the und erlying model. Coming back to your comments on https://issues.apache.org/jira/browse/ARTEMIS-1582. There are two meanings of durable. Durable in the context of a subscription (which is tied to the consumer connection life cycle), and durable in the context persistence (tied to the broker life cycle). The reason you are seeing some queues be durable and others not, is because this is how the JMS spec is implemented using the underlying Artemis model. An non-durable subscription means that the client only gets messages while it's connected. If the server crashes, the client isn't connected anymore. In this case, the spec says, its fine to lose all the messages. For this reason there's no point creating a durable queue. In the JMS Queue (ANYCAST) scenario we need a durable queue because the messages outlive the subscriber connection life cycle. This is also true for durable subscriptions. Regarding your comment on misconfiguration, yes you can do that, but you're specifically overriding broker behaviour to do something else. You're welcome to do this, but you have to be aware that you are breaking protocol/API contracts by doing so.
---