一、Broker 端:限制 Queue 上的 consumer 數(max‑consumers)
如果你想防止某佇列被過量 consumer 掛掉,可以設定 queue 的 max‑consumers 屬性。
用 CLI 連到 JBoss:
bash
複製
編輯
jboss-cli.sh --connect
修改對應 Queue 的設定(假設 queue 名稱為 MyQueue):
bash
複製
編輯
/subsystem=messaging-activemq/server=default/queue=MyQueue:write-attribute(name=max-consumers,value=5)
這樣最多只允許 5 條 consumer 同時連到這個 queue;超過的連線會被拒絕。
重新載入設定:
bash
複製
編輯
reload
確認:
bash
複製
編輯
/subsystem=messaging-activemq/server=default/queue=MyQueue:read-attribute(name=max-consumers)
此屬性對應 Artemis 原生 max‑consumers,預設為 ‑1(不限制)
紅帽產品文件
。
二、Client 端:Spring @JmsListener 的 concurrency
Spring Boot 的 @JmsListener 背後由 DefaultJmsListenerContainerFactory 啟動一組 consumer threads,調整它的 concurrency/max‑concurrency 就能改「client 端」的併發數。
方法 A:在 application.yml 直接設定
yaml
複製
編輯
spring:
jms:
listener:
# 最小併發執行緒數
concurrency: 3
# 最大併發執行緒數
max-concurrency: 15
改完重啟,日誌會看到:
csharp
複製
編輯
Starting JmsListenerContainer with concurrency=3-15
這表示 container 最少啟 3 條、最多可動態擴到 15 條 thread。
Home
方法 B:程式碼自訂 JmsListenerContainerFactory
如果你有更進階需求(transaction、errorHandler…),可以在 Java Config 裡:
java
複製
編輯
@Bean
public DefaultJmsListenerContainerFactory myFactory(ConnectionFactory cf) {
DefaultJmsListenerContainerFactory f = new DefaultJmsListenerContainerFactory();
f.setConnectionFactory(cf);
// 設定最少 3 條、最多 15 條
f.setConcurrency("3-15");
return f;
}
然後在 Listener 上指定:
java
複製
編輯
@JmsListener(destination="MyQueue", containerFactory="myFactory")
public void onMessage(String msg) { … }
小結
要從 Broker 限制「整條 Queue 最多 N 個 consumer」 → CLI 設 max‑consumers
紅帽產品文件
要從 Client(Spring)限制「自己這個 listener 最多啟幾條 thread」 → 調 concurrency / max‑concurrency
Home
兩端可視場景合用:Broker 防範整體過載,Client 精細調整自身併發
5LiA44CBQnJva2VyIOerr++8mumZkOWItiBRdWV1ZSDkuIrnmoQgY29uc3VtZXIg5pW477yIbWF44oCRY29uc3VtZXJz77yJCgrlpoLmnpzkvaDmg7PpmLLmraLmn5DkvYfliJfooqvpgY7ph48gY29uc3VtZXIg5o6b5o6J77yM5Y+v5Lul6Kit5a6aIHF1ZXVlIOeahCBtYXjigJFjb25zdW1lcnMg5bGs5oCn44CCCgoKCueUqCBDTEkg6YCj5YiwIEpCb3Nz77yaCgoKCmJhc2gKCuikh+ijvQoK57eo6LyvCgpqYm9zcy1jbGkuc2ggLS1jb25uZWN0Cgrkv67mlLnlsI3mh4kgUXVldWUg55qE6Kit5a6a77yI5YGH6KitIHF1ZXVlIOWQjeeoseeCuiBNeVF1ZXVl77yJ77yaCgoKCmJhc2gKCuikh+ijvQoK57eo6LyvCgovc3Vic3lzdGVtPW1lc3NhZ2luZy1hY3RpdmVtcS9zZXJ2ZXI9ZGVmYXVsdC9xdWV1ZT1NeVF1ZXVlOndyaXRlLWF0dHJpYnV0ZShuYW1lPW1heC1jb25zdW1lcnMsdmFsdWU9NSkKCumAmeaoo+acgOWkmuWPquWFgeiosSA1IOainSBjb25zdW1lciDlkIzmmYLpgKPliLDpgJnlgIsgcXVldWXvvJvotoXpgY7nmoTpgKPnt5rmnIPooqvmi5LntZXjgIIKCgoK6YeN5paw6LyJ5YWl6Kit5a6a77yaCgoKCmJhc2gKCuikh+ijvQoK57eo6LyvCgpyZWxvYWQKCueiuuiqje+8mgoKCgpiYXNoCgropIfoo70KCue3qOi8rwoKL3N1YnN5c3RlbT1tZXNzYWdpbmctYWN0aXZlbXEvc2VydmVyPWRlZmF1bHQvcXVldWU9TXlRdWV1ZTpyZWFkLWF0dHJpYnV0ZShuYW1lPW1heC1jb25zdW1lcnMpCgrmraTlsazmgKflsI3mh4kgQXJ0ZW1pcyDljp/nlJ8gbWF44oCRY29uc3VtZXJz77yM6aCQ6Kit54K6IOKAkTHvvIjkuI3pmZDliLbvvIkKCue0heW4veeUouWTgeaWh+S7tgoK44CCCgoKCuS6jOOAgUNsaWVudCDnq6/vvJpTcHJpbmcgQEptc0xpc3RlbmVyIOeahCBjb25jdXJyZW5jeQoKU3ByaW5nIEJvb3Qg55qEIEBKbXNMaXN0ZW5lciDog4zlvoznlLEgRGVmYXVsdEptc0xpc3RlbmVyQ29udGFpbmVyRmFjdG9yeSDllZ/li5XkuIDntYQgY29uc3VtZXIgdGhyZWFkc++8jOiqv+aVtOWug+eahCBjb25jdXJyZW5jeS9tYXjigJFjb25jdXJyZW5jeSDlsLHog73mlLnjgIxjbGllbnQg56uv44CN55qE5L2155m85pW444CCCgoKCuaWueazlSBB77ya5ZyoIGFwcGxpY2F0aW9uLnltbCDnm7TmjqXoqK3lrpoKCnlhbWwKCuikh+ijvQoK57eo6LyvCgpzcHJpbmc6CgogIGptczoKCiAgICBsaXN0ZW5lcjoKCiAgICAgICMg5pyA5bCP5L2155m85Z+36KGM57eS5pW4CgogICAgICBjb25jdXJyZW5jeTogMwoKICAgICAgIyDmnIDlpKfkvbXnmbzln7fooYznt5LmlbgKCiAgICAgIG1heC1jb25jdXJyZW5jeTogMTUKCuaUueWujOmHjeWVn++8jOaXpeiqjOacg+eci+WIsO+8mgoKCgpjc2hhcnAKCuikh+ijvQoK57eo6LyvCgpTdGFydGluZyBKbXNMaXN0ZW5lckNvbnRhaW5lciB3aXRoIGNvbmN1cnJlbmN5PTMtMTUKCumAmeihqOekuiBjb250YWluZXIg5pyA5bCR5ZWfIDMg5qKd44CB5pyA5aSa5Y+v5YuV5oWL5pO05YiwIDE1IOainSB0aHJlYWTjgIIKCkhvbWUKCgoK5pa55rOVIELvvJrnqIvlvI/norzoh6roqIIgSm1zTGlzdGVuZXJDb250YWluZXJGYWN0b3J5CgrlpoLmnpzkvaDmnInmm7TpgLLpmo7pnIDmsYLvvIh0cmFuc2FjdGlvbuOAgWVycm9ySGFuZGxlcuKApu+8ie+8jOWPr+S7peWcqCBKYXZhIENvbmZpZyDoo6HvvJoKCgoKamF2YQoK6KSH6KO9Cgrnt6jovK8KCkBCZWFuCgpwdWJsaWMgRGVmYXVsdEptc0xpc3RlbmVyQ29udGFpbmVyRmFjdG9yeSBteUZhY3RvcnkoQ29ubmVjdGlvbkZhY3RvcnkgY2YpIHsKCiAgICBEZWZhdWx0Sm1zTGlzdGVuZXJDb250YWluZXJGYWN0b3J5IGYgPSBuZXcgRGVmYXVsdEptc0xpc3RlbmVyQ29udGFpbmVyRmFjdG9yeSgpOwoKICAgIGYuc2V0Q29ubmVjdGlvbkZhY3RvcnkoY2YpOwoKICAgIC8vIOioreWumuacgOWwkSAzIOaineOAgeacgOWkmiAxNSDmop0KCiAgICBmLnNldENvbmN1cnJlbmN5KCIzLTE1Iik7CgogICAgcmV0dXJuIGY7Cgp9CgrnhLblvozlnKggTGlzdGVuZXIg5LiK5oyH5a6a77yaCgoKCmphdmEKCuikh+ijvQoK57eo6LyvCgpASm1zTGlzdGVuZXIoZGVzdGluYXRpb249Ik15UXVldWUiLCBjb250YWluZXJGYWN0b3J5PSJteUZhY3RvcnkiKQoKcHVibGljIHZvaWQgb25NZXNzYWdlKFN0cmluZyBtc2cpIHsg4oCmIH0KCuWwj+e1kAoK6KaB5b6eIEJyb2tlciDpmZDliLbjgIzmlbTmop0gUXVldWUg5pyA5aSaIE4g5YCLIGNvbnN1bWVy44CNIOKGkiBDTEkg6KitIG1heOKAkWNvbnN1bWVycwoK57SF5bi955Si5ZOB5paH5Lu2CgoKCuimgeW+niBDbGllbnTvvIhTcHJpbmfvvInpmZDliLbjgIzoh6rlt7HpgJnlgIsgbGlzdGVuZXIg5pyA5aSa5ZWf5bm+5qKdIHRocmVhZOOAjSDihpIg6Kq/IGNvbmN1cnJlbmN5IC8gbWF44oCRY29uY3VycmVuY3kKCkhvbWUKCgoK5YWp56uv5Y+v6KaW5aC05pmv5ZCI55So77yaQnJva2VyIOmYsuevhOaVtOmrlOmBjui8ie+8jENsaWVudCDnsr7ntLDoqr/mlbToh6rouqvkvbXnmbwK