docker-compose 部署rocketMq后创建topic出错

本文介绍了在使用docker-compose部署RocketMQ后遇到创建topic失败的问题,详细讲述了错误信息‘MQClientException: No route info of this topic, TopicTest’的解决过程。通过进入docker容器,检查并修改tools.sh脚本中-Djava.ext.dirs的路径,最终成功查看到topic的路由信息。" 113166279,10545362,MySQL自定义排序使用field()函数解析,"['数据库', 'SQL', 'MySQL函数']

rocketmq中文介绍及简单示例

docker-compose 部署 rocketmq

发送消息时出现错误

MQClientException: No route info of this topic, TopicTest

  1. 进入docker容器,docker exec -it rmqnamesrv /bin/sh
  2. 查看具体日志:./mqadmin topicRoute -n localhost:9876 -t TopicTest
org.apache.rocketmq.tools.command.SubCommandException: TopicRouteSubCommand command failed
   at org.apache.rocketmq.tools.command.topic.TopicRouteSubCommand.execute(TopicRouteSubCommand.java:64)
   at org.apache.rocketmq.tools.command.MQAdminStartup.main0(MQAdminStartup.java:138)
   at org.apache.rocketmq.tools.command.MQAdminStartup.main(MQAdminStartup.java:89)
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:68)
   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:370)
   at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1331)
   at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1321)
   at org.apache.rocketmq.tools.admin.DefaultMQAdminExtImpl.examineTopicRouteInfo(DefaultMQAdminExtImpl.java:305)
   at org.apache.rocketmq.tools.admin.DefaultMQAdminExt.examineTopicRouteInfo(DefaultMQAdminExt.java:251)
   at org.apache.rocketmq.tools.command.topic.TopicRouteSubCommand.execute(TopicRouteSubCommand.java:60)
   ... 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)
   ... 13 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)
   ... 14 more

  1. 查找/jre/lib/ext jar包路径:find / -name ‘ext’ |grep jdk
find: '/proc/tty/driver': Permission denied
find: '/root': Permission denied
find: '/run/cryptsetup': Permission denied
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/bin/extcheck
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre/lib/ext
/usr/lib/jvm-exports/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jdbc-stdext-1.8.0.222.b10.jar
/usr/lib/jvm-exports/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jdbc-stdext-1.8.0.jar
/usr/lib/jvm-exports/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jdbc-stdext-3.0.jar
/usr/lib/jvm-exports/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jdbc-stdext.jar

  1. 修改tools.sh: vi tools.sh (-Djava.ext.dirs 值后面添加XX/XX/jre/lib/ext全路径)

#===========================================================================================
# JVM Configuration
#===========================================================================================
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_HOME}/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre/lib/ext"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

$JAVA ${JAVA_OPT} $@

  1. 再次查看日志信息:mqadmin topicRoute -n localhost:9876 -t TopicTest
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
{
	"brokerDatas":[
		{
			"brokerAddrs":{0:"172.22.0.4:10911"
			},
			"brokerName":"broker-a",
			"cluster":"DefaultCluster"
		}
	],
	"filterServerTable":{},
	"queueDatas":[
		{
			"brokerName":"broker-a",
			"perm":6,
			"readQueueNums":16,
			"topicSynFlag":0,
			"writeQueueNums":16
		}
	]
}

### 使用 Docker Compose 部署 RocketMQ 为了成功使用 Docker Compose 部署 RocketMQ,需准备两个主要文件:`broker.conf` 和 `docker-compose.yml` 文件[^3]。 #### 创建 Broker 配置文件 (`broker.conf`) Broker 的配置决定了消息队列的行为方式。以下是创建一个简单的 broker 配置文件的例子: ```properties # broker配置文件示例 brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH autoCreateTopicEnable=true brokerIP1=[宿主机IP地址] namesrvAddr=namesrv:9876 ``` 此配置定义了一个异步刷盘类型的 master 节点,并启用了自动创建主题的功能[^5]。 #### 编写 Docker Compose 文件 (`docker-compose.yml`) 接下来编写用于启动服务的 `docker-compose.yml` 文件。这里提供了一种基本设置来运行单节点 RocketMQ 实例的方式: ```yaml version: '3' services: namesrv: image: apache/rocketmq:latest container_name: rmqnamesrv environment: - JAVA_OPTS=-server -Xms512m -Xmx512m command: sh mqnamesrv ports: - "9876:9876" broker: image: apache/rocketmq:latest container_name: rmqbroker depends_on: - namesrv environment: - JAVA_OPTS=-server -Xms512m -Xmx512m volumes: - ./data/broker/logs:/home/rocketmq/logs - ./data/broker/store:/home/rocketmq/store - ./data/broker/conf/broker.conf:/opt/rocketmq-*/conf/broker.conf command: sh mqbroker -n localhost:9876 autoCreateTopicEnable=true ports: - "10911:10911" - "10909:10909" ``` 上述 YAML 定义了 Name Server 和 Broker 两个服务实例。通过挂载本地目录到容器内存储日志和数据,可以持久保存这些信息;同时指定了自定义的 `broker.conf` 来覆盖默认配置。 完成以上两部分之后,在命令行工具中执行如下指令即可启动 RocketMQ: ```bash docker-compose -f docker-compose.yml up -d ``` 这将以守护进程模式后台运行所有组件并保持其持续工作状态[^2]。 对于更复杂的场景如双主模式或多副本集群,则需要调整相应的参数和服务数量以适应特定需求[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值