java - 为 JMS 发布者/消费者设置 clientID 的目的是什么?

标签 java jms activemq publish-subscribe

我了解在为持久主题编写 jms 主题订阅者时需要设置 clientId 和订阅名称。

但是发布TOPIC时设置clientID的目的是什么?我见过有人甚至为发布者/消费者设置客户端 ID,但没有人解释为什么需要它。

ConnectionFactory conFactory =  this.getConnectionFactory();
Connection connection = conFactory.createConnection();

connection.setClientID("WHATS_MY_PURPOSE"); // Why do we need clientID while publishing the TOPIC from consumer / publisher

connection.start();
MessageProducer producer = session.createProducer(destination);

最佳答案

clientId 是唯一标识应用程序所必需的。在 Pub/Sub 消息传递模式中使用持久订阅时,这是必须的。您可能知道,消息传递提供程序会在持久订阅者应用程序离线时缓存发布。当此类应用程序再次联机时,消息传递提供者必须识别 OK,这是创建持久订阅但因某种原因消失的同一个应用程序。现在它回来了。因此,让我发送此应用程序离开时发布的所有消息。为了验证它是同一个应用程序,消息传递提供程序将应用程序的 clientId 与可用于缓存订阅信息的 clientId 进行比较。

关于java - 为 JMS 发布者/消费者设置 clientID 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47006972/

相关文章:

java - Spring Boot 测试 - MockHttpServletResponse getContentLength 返回 0 尽管有内容

java - 如何使用 t3s 连接到 Weblogic JMS 队列?

java - CXF 3 缓存级别

java - 重播通过 ActiveMQ 发送的消息

Java 输出 (y*++z/(z-- -6.0) + 'd' *0.5);

java - 我如何告诉 Maven Artifact 已重命名?

java - activemq jndi tomcat错误

java - 在 ActiveMQ 中查看消息时,可序列化类不可用于代理 : java. lang.ClassNotFoundException

java - 使用 TableModel 刷新 JTable

spring - Azure ServiceBus JMS 库是否支持托管标识?