java - 如何使用连接池在 JM 中使用 activeMQ 创建发布者
问题描述
每次我需要在主题中添加消息时,我都使用以下代码创建发布者,我会运行它,但有时它会出错
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://" + ip + ":" + port );
connection = connectionFactory.createConnection();
connection.setClientID(publisherName);
PooledConnectionFactory pf = new PooledConnectionFactory(connectionFactory);
pf.setMaxConnections(1000);
Session session = connection.createSession(false,session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(TopicName);
MessageProducer messageProducer = session.createProducer(topic);
错误:
javax.jms.InvalidClientIDException: Broker: localhost - Client: AthenaPublisher already connected from tcp://127.0.0.1:44448
解决方案
在设置客户端 ID 时使用池将不可避免地导致这样的错误,因为在任何给定时间,您只能将一个具有给定客户端 ID 的连接连接到代理。在您的情况下,您正在为 1000 个池连接配置池,因此经常会创建一个新连接并产生您给出的错误。您需要不使用池或使用只有 1 个与您的代码共享会话级别资源的池连接的池。
推荐阅读
- flutter - 获取 Dart 中即将出现的重复日的日期
- apache - Thruk cgi 身份验证覆盖
- c++ - 在 Clang AST 中,如何知道方法中的 DeclRefExpr 是指包含该方法的结构/类的本地数据成员还是非静态数据成员?
- java - 从零开始的 Java.Util 链表实现
- pandas - 如何根据另一个数据帧中行的条件向量化查找一个数据帧的行索引
- terminal - 将 tmux 前缀重新绑定到 alt 键
- python - 按特定列排序标题 - 熊猫
- javascript - 401:生成 API 令牌的身份验证失败
- javascript - face-api 出错 - 错误:toNetInput - 预期媒体类型为 HTMLImageElement
- serialization - 串行Arduino中的随机损坏数据