Node.js中用solclientjs在生产者流程能否创建持久队列?createDurableQueueDestination是否自动创建?
Solclientjs生产者流程中持久队列相关问题解答
问题1:Node.js环境下能否用solclientjs在生产者流程中创建持久队列?
可以,但需满足两个条件:
- Solace PubSub Broker已配置允许自动创建队列(默认关闭,需通过Broker管理界面或CLI开启对应策略);
- 生产者使用的客户端账号拥有创建队列的权限。
solclientjs本身不直接创建队列,实际队列创建由Broker完成,客户端仅通过发送消息触发Broker的自动创建逻辑(若配置允许)。
问题2:SolclientFactory.createDurableQueueDestination()方法会自动创建不存在的持久队列吗?
不会。该方法仅在本地生成一个代表持久队列的Destination对象,用于指定消息的发送目标,不会向Broker发起队列创建请求。
若Broker未配置自动创建队列,且目标队列不存在,调用session.send()发送消息时会抛出错误,提示队列不存在。
代码示例解析
你提供的代码仅完成消息构造与发送逻辑,未涉及队列创建:
var messageText = 'Sample Message'; var message = solace.SolclientFactory.createMessage(); // 仅创建本地的持久队列目标对象,不触发Broker端队列创建 message.setDestination(solace.SolclientFactory.createDurableQueueDestination(producer.queueName)); message.setBinaryAttachment(messageText); message.setDeliveryMode(solace.MessageDeliveryModeType.PERSISTENT); const correlationKey = { name: "MESSAGE_CORRELATIONKEY", id: sequenceNr, }; message.setCorrelationKey(correlationKey); try { producer.session.send(message); producer.log('Message #' + sequenceNr + ' sent to queue "' + producer.queueName + '", correlation key = ' + JSON.stringify(correlationKey)); } catch (error) { producer.log(error.toString()); }
如果目标队列不存在且Broker未开启自动创建,session.send()会进入catch块,输出队列不存在的错误信息。
实现自动创建队列的补充说明
要让生产者流程能自动创建持久队列,需在Broker侧配置:
- 进入对应VPN的设置,开启自动创建队列选项;
- 确保客户端账号具备
create queue权限; - 也可通过Solace管理API(REST/CLI)提前创建队列,再由生产者发送消息。
内容的提问来源于stack exchange,提问作者praskabh
相关产品推荐
相关产品推荐

