org.apache.rocketmq.tools.command.SubCommandException: TopicListSubCommand command failed at org.apache.rocketmq.tools.command.topic.TopicListSubCommand.execute(TopicListSubCommand.java:113) at org.apache.rocketmq.tools.command.MQAdminStartup.main0(MQAdminStartup.java:140) at org.apache.rocketmq.tools.command.MQAdminStartup.main(MQAdminStartup.java:91) Caused by: org.apache.rocketmq.acl.common.AclException: [10015:signature-failed] unable to calculate a request signature. error=[10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available at org.apache.rocketmq.acl.common.AclSigner.signAndbase64Encode(AclSigner.java:84) at org.apache.rocketmq.acl.common.AclSigner.calSignature(AclSigner.java:73) at org.apache.rocketmq.acl.common.AclSigner.calSignature(AclSigner.java:68) at org.apache.rocketmq.acl.common.AclUtils.calSignature(AclUtils.java:69) at org.apache.rocketmq.acl.common.AclClientRPCHook.doBeforeRequest(AclClientRPCHook.java:44) at org.apache.rocketmq.remoting.netty.NettyRemotingAbstract.doBeforeRpcHooks(NettyRemotingAbstract.java:172) at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:372) at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicListFromNameServer(MQClientAPIImpl.java:1392) at org.apache.rocketmq.tools.admin.DefaultMQAdminExtImpl.fetchAllTopicList(DefaultMQAdminExtImpl.java:253) at org.apache.rocketmq.tools.admin.DefaultMQAdminExt.fetchAllTopicList(DefaultMQAdminExt.java:218) at org.apache.rocketmq.tools.command.topic.TopicListSubCommand.execute(TopicListSubCommand.java:107) ... 2 more Caused by: org.apache.rocketmq.acl.common.AclException: [10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available at org.apache.rocketmq.acl.common.AclSigner.sign(AclSigner.java:63) at org.apache.rocketmq.acl.common.AclSigner.signAndbase64Encode(AclSigner.java:79) ... 12 more Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available at javax.crypto.Mac.getInstance(Mac.java:181) at org.apache.rocketmq.acl.common.AclSigner.sign(AclSigner.java:57) ... 13 more解决办法
1.进入rocketmq的bin目录下:/software/rocketmq/rocketmq-all-4.8.0-bin-release,
/software/rocketmq/rocketmq-all-4.8.0-bin-release是我自己的安装路径。
2.用vim tools.sh打开tools.sh.在JAVA_OPT配置中,在-Djava.ext.dirs一行最后面添加ext的路径,我的ext路径如下:
修改前:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=128m"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${base_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
修改后:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=128m"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${base_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:/usr/java/jdk1.8.0_121/jre/lib/ext"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
解决方法二
看RocketMQbin目录下的tools.sh文件,其中有那么一句话:
所以我们可以通过修改/etc/profile文件,在其中添加JAVA_HOME变量,值为java的安装目录;并且export导出JAVA_HOME变量,使得其他Linux进程可以获取到JAVA_HOME变量
验证再次执行命令:
sh ./bin/mqadmin topicList
很尴尬,又出异常了;我们看看异常信息,感觉是因为我没指定NameServer地址的原因。
我们指定nameServer地址再试试:
sh ./mqadmin topicList -n 127.0.0.1:9876
成功获取到Topic的列表。



