使用jnats创建NATS Stream时报JetStream超时无响应如何解决?
问题原因
核心问题是你启动NATS Docker容器时没有开启JetStream功能:NATS服务默认禁用JetStream特性,所以客户端的JetStream相关请求(创建Stream)无法得到服务端响应,最终触发超时异常。
你代码中每次调用接口都新建NATS连接的写法属于优化项,不是本次报错的直接诱因。
解决方案
1. 启动带JetStream功能的NATS容器
启动容器时追加-js参数开启JetStream特性,命令如下:
docker run -p 4222:4222 -ti nats:latest -js
如果需要持久化JetStream数据,可额外添加存储挂载配置,本地测试用上面的命令即可。
2. (可选)代码优化建议
当前接口每次调用都会创建新的NATS连接,建议将连接改为单例全局复用,避免频繁创建销毁连接浪费资源,参考实现:
@Component public class NatsProducer { private Connection connection; // 项目启动时自动初始化连接 @PostConstruct @SneakyThrows public void openConnection() { connection = Nats.connect(); } @SneakyThrows public void openStream(String name, String sub) { JetStreamManagement jsm = connection.jetStreamManagement(); StreamConfiguration conf = StreamConfiguration.builder() .name(name) .subjects(sub) .storageType(StorageType.Memory) .build(); StreamInfo streamInfo = jsm.addStream(conf); JsonUtils.printFormatted(streamInfo); } }
验证
重启带JetStream的NATS容器后再次调用接口,即可正常创建Stream,不会再抛出超时异常。
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

