我们遇到了“发布保证的消息发布”错误,它报告:
[ERR] {"message":"Guaranteed Message Window Closed","name":"OperationError","subcode":22,"level":"error","stack":"OperationError: Guaranteed Message Window Closed\n
at PublisherFSM.prepareAdMessageAndSend (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:21530:13)\n
at MessagePublisher.prepareAdMessageAndSend (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:20866:22)\n
at SessionFSM.prepareAndSendMessage (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:26483:49)\n
at Session.validateAndSendMessage (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:29161:22)\n
at Session.send (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:28463:10)\n
由于客户端已知的原因挂起了许多未确认的消息(默认窗口大小为50)https://solace.com/blog/understanding-guaranteed-message-publish-window-sizes-and-acknowledgement/。每次检查日志后,应用程序方在发布以解决问题超过1秒后都可以收到确认通知。
那么引入的solace服务器不能在客户端确认这么多消息的根本原因是什么?我们检查了客户端应用程序日志,然后发现以下与安慰相关的错误:
at PublisherFSM.process (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:17780:11)
at PublisherFSM.processEvent (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:17841:15)
at State.onEntry (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:2201:17)
at BufferSMFClient.rxDataBuffer (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:33020:10)
at CorrelatedRequest.respRecvdCallback (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:21257:77)
at SessionFSM.handleADCtrlMessage (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:25872:26)
ERROR solclientjs: Uncaught exception in {PublisherFSM: PublisherFSM} while processing {PublisherFSMEvent: MessagePublisherFailed}: TypeError: Cannot read property 'nextCorrelationTag' of null
at PublisherFSM.<anonymous> (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:17847:49)
at State.handleOpenFlowResponse (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:21120:22)
at TcpRawTransport.onData (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:34168:20)
at SessionFSM.getCorrelationTag (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:25777:28)
at SessionFSM.handleSMFMessage (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:26116:23)
at BufferSMFClient._rxSmfCB (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:26352:41)
at BufferSMFClient._rxDataCB (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:33074:16)
at State.sendOpenFlow (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:21244:47)
at State.onEntry (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:21262:14)
at State.processReactionResult (/home/vcap/deps/0/node_modules/solclientjs/lib/solclientjs-debug.js:9001:18)
我们使用了solclientjs 10.2.1和Solace VMR 9.0.0.17。
我们只能重新启动客户端应用程序,但是那些未确认的消息会丢失。