当前位置: 首页 > 知识库问答 >
问题:

我们是否应该在连接工厂上调用setClientId()?

谢夜洛
2023-03-14

这是在创建持久订阅的上下文中。
DefaultMessageListenerContainer中有一个setClientId(),SingleConnectionFactory中有一个。

我的理解是:

    < li >长期订阅适用于消费者/订户。 < li >不同的消费者应该能够使用不同的客户端id。 < li >不同的消费者应该能够共享一个连接。 < li >每个使用者有一个(ListenerContainer,Listener)对。

因此,在侦听器容器中设置ClientId()是有意义的。

但是,为什么在连接工厂级别会有一个setClientId()

即使SingleConnectionFactory只有一个连接,该连接也可以由多个使用者跨多个会话共享。正当不用说,CachingConnectionFactory(它从SingleConnectionFactory继承了这个方法)更危险。

扩展版本:我们能说不应该在单个/CachingConnectionFactory上使用setClientId()吗?DefaultMessageListenerContainer的setClientId()中的以下语句使这一点变得更加必要:

此外,只有在原始ConnectionFactory尚未分配客户机ID的情况下,才能分配客户机ID

因此,如果有人不小心在CachingConnectionFactory上设置了ClientId,那么将来在DefaultMessageListenerContainer上设置的客户端Id将是no-ops!

共有1个答案

巫新知
2023-03-14

但是,为什么在连接工厂级别会有setClientId()?

连接工厂上的<code>setClientId()

我们可以说不应该在单个/CachingConnectionFactory上使用setClientId()吗?

如果需要为不同的订阅服务器创建持久订阅(每个订阅服务器都有自己的客户端 ID),请使用订阅者.setClientId(),因为如果使用 connectionFactory.setClientId() 并尝试从已设置客户端 ID 的同一工厂创建多个连接,则工厂将引发异常,抱怨“连接客户端 Id 已连接”。

就我个人而言,我喜欢在代码中具有灵活性和完全的控制,所以我使用subscriber.setClientId()

 类似资料:
  • 关于这一点的文献不多。我想知道,我们应该先打电话吗 或 在https://developers.google.com/admob/android/quick-start 尽管谷歌建议致电<code>MobileAds。尽早初始化 在加载广告之前,让您的应用通过调用MobileAds.initialize()初始化Mobile Ads SDK,MobileAds.initialize初始化SDK,并

  • 众所周知,SO_REUSEPORT允许多个套接字侦听相同的IP地址和端口组合,它将每秒的请求增加2-3倍,并减少延迟(~30%)和延迟的标准偏差(8倍):https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/ NGINX release 1.9.1引入了一个新特性,支持使用SO_REUSEPORT套接字选项,该选项在许多操作系

  • 问题内容: 我无法通过一些Google搜索找到权威的答案。在Java Servlet中,可以通过response.getOutputStream()或response.getWriter()访问响应主体。写入流后,是否应该在此流上调用.close()? 一方面,Blochian鼓励始终关闭输出流。另一方面,我不认为在这种情况下有需要关闭的基础资源。套接字的打开/关闭在HTTP级别进行管理,以允许诸

  • 问题内容: 我正在使用’multiprocess.Pool.imap_unordered’如下 我需要打电话或之后的for循环? 问题答案: 不,您没有,但是如果您不再使用游泳池,那可能是个好主意。 Tim Peters在此SO帖子中致电或致电的理由很明确: 至于Pool.close(),您应该在永远不会将更多工作提交给Pool实例的情况下(且仅在)进行调用。因此,通常在主程序的可并行化部分完成时

  • 问题内容: PHP手册建议检查返回值并在屏幕上显示错误消息。 同样,对于OOP样式的构造函数,建议这样做: Stack Overflow上的一些用户甚至使用了如下代码: 但是,在过去的几周里,我一直在问自己一个问题,为什么我需要这样做?第一个示例的输出是: 警告:mysqli_connect():(HY000 / 1045):在第4行的C:\ xampp \ … \ mysqli.php中,用户’

  • mysqli_connect()的PHP手册建议检查返回值并在屏幕上显示错误消息。 类似地,对于OOP样式的构造函数,建议这样做: 堆栈溢出上的一些用户甚至使用带有的代码,例如: 然而,在过去的几周里,我一直在问自己一个问题,为什么我需要这样做?第一个示例的输出为: 警告:mysqli_connect():(HY000/1045):在第4行的C:\xampp\…\mysqli.php中,用户“my