這是創建持久訂閱的上下文。
有一個SETCLIENTID()在DefaultMessageListenerContainer,另一個在SingleConnectionFactory。我們是否應該在連接工廠上調用setClientId()?
我的理解是:
- 長期訂閱是消費者/用戶。
- 不同的消費者應該能夠使用不同的客戶ID。
- 不同的消費者應該能夠共享一個連接。
- 沒有每個消費者酮(ListenerContainer,監聽器)對。
因此,它對ListenerContainer的setClientId()是有意義的。
但是,爲什麼會有一個SETCLIENTID()連接工廠的水平?
即使SingleConnectionFactory只有一個連接,該連接可以由多個使用者在多個會話中共享。對 ? 不用說,它是一個CachingConnectionFactory(其繼承SingleConnectionFactory此方法)更危險。
擴展版本: 我們可以說在一個單人/ CachingConnectionFactory一個不應使用SETCLIENTID()? 這在使用DefaultMessageListenerContainer的SETCLIENTID()做更有必要通過了如下聲明:
此外,客戶端ID只能如果原來 連接工廠尚未分配一個
所以分配,如果有人不小心在CachingConnectionFactory上設置了ClientId,那麼DefaultMessageListenerContainer上未來的客戶端ID將是no-ops!