这是创建持久订阅的上下文。
有一个SETCLIENTID()在DefaultMessageListenerContainer,另一个在SingleConnectionFactory。我们是否应该在连接工厂上调用setClientId()?
我的理解是:
- 长期订阅是消费者/用户。
- 不同的消费者应该能够使用不同的客户ID。
- 不同的消费者应该能够共享一个连接。
- 没有每个消费者酮(ListenerContainer,监听器)对。
因此,它对ListenerContainer的setClientId()是有意义的。
但是,为什么会有一个SETCLIENTID()连接工厂的水平?
即使SingleConnectionFactory只有一个连接,该连接可以由多个使用者在多个会话中共享。对 ? 不用说,它是一个CachingConnectionFactory(其继承SingleConnectionFactory此方法)更危险。
扩展版本: 我们可以说在一个单人/ CachingConnectionFactory一个不应使用SETCLIENTID()? 这在使用DefaultMessageListenerContainer的SETCLIENTID()做更有必要通过了如下声明:
此外,客户端ID只能如果原来 连接工厂尚未分配一个
所以分配,如果有人不小心在CachingConnectionFactory上设置了ClientId,那么DefaultMessageListenerContainer上未来的客户端ID将是no-ops!